我正在使用带Ruby on Rails的Capybara来创建一个集成测试,它将填充所有字段并提交表单。然后,这将向浏览器加载新页面。是否可以在测试中获得第二页的响应?
describe "the signup process", :type => :request do
it "signs me in" do
visit sign_up_path
fill_in 'user_first_name', :with => "Jhonny"
t1 = Time.new
fill_in 'user_email', :with => "joe412@offerslot.com"
fill_in 'user_last_name', :with => "Bravo"
fill_in 'user_zip_code', :with => "94102"
fill_in 'user_password', :with => "password1234"
click_button 'user-button'
response.should be_success
response.body should_contain("Text on next page")
end
end
答案 0 :(得分:1)
如果您使用capybara的visit
,则无法访问响应状态,因为水豚不提供该信息。如果要分析响应状态,则必须使用普通的HTTP请求谓词(即get
,post
等),但这些不适用于您描述的情况,因为您的测试涉及多个页面
(使用visit
与get
是一个常见的混淆点。有关详细信息,请参阅JoséValim的this post。)
基本上,答案是:不要在集成测试中测试响应状态。
但你无论如何都不应该这样做。集成测试旨在测试用户实际看到的内容,即浏览器中出现的内容。你没有“看到”一个响应状态,你看到的是实际页面及其中的内容,所以这就是你应该测试的内容。在上面的测试中,这就是您使用第response.body should_contain("Text on next page")
行所做的事情。这足以确保响应成功。
如果你想测试你的应用程序的类似API的方面,那么我建议使用rspec请求规范(基本上是集成测试,但重点是一步请求/响应。)你可以使用get
使用capybara匹配器请求并分析响应。