我在...的响应中收到错误
规格/特征/ test_name_spec.rb
require "spec_helper"
describe "the signin process", :type => :feature do
it "does not sign me in if I use the wrong password" do
visit '/users/sign_in'
within("#new_user") do
user = Fabricate(:user, email: 'user@example.com', password: 'password')
fill_in 'Email', :with => 'user@ example.com'
fill_in 'Password', :with => 'badone'
end
click_button 'Log in'
expect(response).to render_template(:new)
end
end
gemfile
group :test do
gem 'shoulda-matchers', '~> 2.8', require: false # now loaded inside of spec/spec_helper.rb
gem 'capybara', '~>2.4'
gem 'launchy'
gem 'capybara-email', github: "dockyard/capybara-email"
gem 'database_cleaner', '~> 1.5', '>= 1.5.1'
end
我感到很困惑,因为上面的测试成功使用expect,而page
expect(page).to have_content 'Signed in successfully.'
这可能会发生什么?
修改
我已将其更改为...
expect(page).to have_content 'Log in'
这基本上是一回事,但我仍然想知道为什么response
犯了错误。它是不是在Capybara中可用,还是有另一个问题为什么那不起作用?
答案 0 :(得分:7)
您正在撰写feature spec。使用功能规范,没有响应对象。根据设计,使用功能规范,您不会使用低级别的问题进行测试,例如呈现的模板,但是更高级别的问题,例如页面上的预期内容。
您可能对映射到rails的集成测试的request specs感兴趣,因此允许跨多个请求的规范,但会公开响应方法。
但是你不能(或者至少不应该)在请求规范中使用水豚(in
,visit
等) - 对混合集成的问题已经失去了很多时间测试语言(click_button
,get
,post
)和水豚。这两者存在于完全独立的世界中,例如由水豚触发的请求对response
没有影响,response
触发的请求对get
没有影响。
答案 1 :(得分:1)
expect
阻止之外的it
。这将导致各种各样的乱七八糟。
所有断言(和测试设置代码)都应嵌套在it
,before
和after
块中。