使用Capybara检查多个页面上的页面响应

我正在使用带有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 

如果您使用capybara的visit ,则无法访问响应状态,因为Capybara不提供该信息。 如果要分析响应状态,则必须使用正常的HTTP请求谓词(即getpost等),但由于您的测试涉及多个页面,因此这些不适用于您描述的情况。

visitget的使用是一个常见的混淆点。有关详细信息,请参阅JoséValim撰写的这篇文章 。)

基本上,答案是:不要在集成测试中测试响应状态。

但无论如何你不应该这样做。 集成测试旨在测试用户实际看到的内容,即浏览器中出现的内容。 你没有“看到”一个响应状态,你看到的是实际页面及其中的内容,所以这就是你应该测试的内容。 在上面的测试中,这就是你对行response.body should_contain("Text on next page")所做的事情response.body should_contain("Text on next page") 。 这足以确保响应成功。

如果你想测试你的应用程序的类似API的方面,那么我建议使用rspec请求规范(基本上是集成测试,但重点是一步请求/响应。)你可以使用get请求和使用水豚匹配器分析响应。