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

时间:2012-09-29 00:18:09

标签: ruby-on-rails ruby 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

1 个答案:

答案 0 :(得分:1)

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

(使用visitget是一个常见的混淆点。有关详细信息,请参阅JoséValim的this post。)

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

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

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