Tag: rspec

保存失败后Rails没有回滚事务()

我有这个域模型:用户有一组项目,项目的状态可能无法通过validation。 validation工作正常,我甚至看到当我使用save!时调用exceptionsave! 。 在我的控制器中,我有这个: @user.items() < {}, :status => :ok else render :json => {:status => :error, :errors => item.errors}, :status => :bad_request end 第一个POST成功,第二个POST失败,但是当我点击索引时,我仍然看到两个对象,好像第二个事务从未回滚过。 到底是怎么回事? 我的测试是这样的: post :create post :create get :index ActiveSupport::JSON.decode(response.body).length.should == 1 编辑:即使在运行服务器时,也不会回滚事务(sqlite3)。

Capybara + RSpec仅在控制器规格中看到空白页。 为什么?

我正在尝试为简单的控制器编写控制器规范。 但是,Capybara没有看到任何页面内容。 但是,在浏览器中查看网站的页面效果很好。 我究竟做错了什么? 谢谢! 我的控制器规格 我的spec_helper.rb 我的Gemfile

如何在Capybara测试中使用Rspec确定Warden / Devise

我想在我的Rails应用程序中使用Capybara测试套件中的rspec模拟存根登录用户(使用Devise / Warden)。 这将节省大量时间,并且意味着我的测试套件可以/将定期运行。 以前我可以使用authlogic来执行此操作,方法是使用以下代码来截断我的会话模型: def login(user) user_session = mock_model(UserSession, {:user => user}) UserSession.stub(:find).and_return(user_session) end 现在我正在使用Devise,我再也无法访问UserSession对象了。 因为我使用capybara来测试我的代码,所以我没有直接访问请求对象来使用sign_in内置的sign_in测试助手。 我的问题是:如何使用水豚,设计和规范模拟模拟登录用户,而不需要每个具有登录用户的方案首先进入注册路径,填写表单,提交,等待响应,以及然后转到所需的页面?

是否可以在`somewhere’中添加`before(:each)`钩子,以便所有spec文件都可以运行它?

我正在使用Ruby on Rails 3.2.2和rspec-rails-2.8.1。 为了使我的spec文件DRY (不要重复自己)并为test数据库播种,我想为所有这些spec文件运行一个before(:each)钩子。 也就是说,在我的所有spec文件中,我有以下代码: describe ‘test description’ do before(:each) do load “#{Rails.root}/db/seeds.rb” end … end 是否可以添加“somewhere” before(:each)挂钩,以便所有spec文件都可以运行它? 你有什么建议?

RSpec中“be_true”和“be true”之间的区别是什么?

任何人都be true通过简单的例子向我解释be_true与Ruby之间的区别。 我也看到be_true和be_false被改为be_truthy和be_falsey 我有一个’be true’工作的例子,但是当我尝试使用’be_true’或’be_truthy’规格失败了。 我使用RSpec版本3.1.7

使用rspec测试具有子域约束的​​路由

我无法让我的rspec路由测试使用子域约束。 具体来说,我有一条路线 constraints :subdomain => “api” do resources :sign_ups, :only => [:create] end 和(除其他外)测试 it “does allow creation of sign ups” do {:post => “/sign_ups”}.should route_to( :controller => “sign_ups”, :action => “create”, ) end 如果我删除了这个测试通过的子域约束,但是它会失败。 我必须告诉rspec使用子域名,但我不知道如何 TIA 安迪

rspec测试的问题,未定义的方法’post’

当有人通过URL发送查询时,我正在编写一个规范来测试mashup_controller的行为。 我需要模拟URL中包含的参数,我读到post()方法会这样做,但是当我收到错误时: 1) MashupController simulates query Failure/Error: post :create NoMethodError: undefined method `post’ for # # ./mashup_controller_rspec.rb:9:in `block (2 levels) in ‘ Finished in 0.20199 seconds 1 example, 1 failure Failed examples: rspec ./mashup_controller_rspec.rb:7 # MashupController simulates query 这是我的代码: require ‘spec_helper’ require ‘mashup_controller.rb’ describe MashupController do it “simulates query” do post :create end end 对不起,如果我没有任何意义。 […]

在rspec中指定内容类型

我正在尝试构建一个通过POST发送JSON(或XML)的rspec测试。 但是,我似乎无法让它真正起作用: json = {…. data ….}.to_json post ‘/model1.json’,json,{‘CONTENT_TYPE’=>’application/json’} 还有这个 json = {…. data ….}.to_json post ‘/model1.json’,json,{‘Content-Type’=>’application/json’} 有任何想法吗? 谢谢!

更改默认的Capybara浏览器窗口大小

所以,关于使用Capybara和RSpec的集成测试,我知道我可以这样做: page.driver.browser.manage.window.resize_to(x,y) per 如何在 Rspec (Selenium)中为特定的RSpec测试设置浏览器窗口大小 ,但有没有办法全局执行此操作,以便受媒体查询影响的每个测试都不必定义此项?

如何使用Rspec和Capybara测试重定向

我不知道我做错了什么,但每次我尝试测试重定向时,都会收到此错误:“@request必须是ActionDispatch :: Request” context “as non-signed in user” do it “should redirect to the login page” do expect { visit admin_account_url(account, host: get_host(account)) }.to redirect_to(signin_path) end end 1) AdminAccountPages Admin::Accounts#show as non-signed in user should redirect to the login page Failure/Error: expect { visit admin_account_url(account, host: get_host(account)) }.to redirect_to(signin_path) ArgumentError: @request must be an ActionDispatch::Request […]