1

Ruby on Rails で Capybara を使用して、すべてのフィールドに入力してフォームを送信する統合テストを作成しています。これにより、ブラウザに新しいページが読み込まれます。テストでこの 2 ページ目の応答を取得することは可能ですか?

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

カピバラを使用する場合visit、カピバラはその情報を提供しないため、応答ステータスにアクセスできません。応答ステータスを分析する場合は、通常の HTTP 要求動詞 (つまりgetpostなど) を使用する必要がありますが、テストに複数のページが含まれるため、説明したケースでは機能しません。

( vs の使用はよくある混乱のポイントです。詳細については、José Valim によるこの投稿を参照してくださいvisit)get

つまり、基本的には、統合テストで応答ステータスをテストしないでください。

しかし、とにかくこれを行うべきではありません。統合テストは、ユーザーが実際に見ているもの、つまりブラウザーに表示されるものをテストすることを目的としています。応答ステータスを「見る」ことはありません。表示されるのは実際のページとそこに含まれるものであるため、実際にテストする必要があります。上記のテストでは、それが行で行っていることですresponse.body should_contain("Text on next page")。応答が成功したことを確認するには、これで十分です。

API に似たアプリケーションの側面をテストしたい場合は、rspec リクエスト仕様を使用することをお勧めします (これは基本的に統合テストですが、ワンステップのリクエスト/レスポンスに焦点を当てています)。getリクエストを使用して分析できます。カピバラマッチャーを使用した応答。

于 2012-09-30T01:32:07.623 に答える