1

我正在使用 Capybara 和 Ruby on Rails 创建一个集成测试,该测试将填写所有字段并提交表单。然后,这会将新页面加载到浏览器。是否有可能在测试中获得第二页的响应?

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
4

1 回答 1

1

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

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

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

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

如果您想测试应用程序的专门类似于 API 的方面,那么我建议为此使用 rspec 请求规范(本质上是集成测试,但专注于一步请求/响应。)您可以使用get请求并分析使用水豚匹配器的响应。

于 2012-09-30T01:32:07.623 回答