私はRoRにかなり慣れていませんが、最近、アプリケーションのテスト用にBDD/Rspecを学び始めました。 AJAX=リクエストを指定する方法を探していましたが、これまでのところ、これに関するドキュメントはほとんど見つかりません。
誰でもこれを行う方法を知っていますか?私はRails 2.3.8、rspec 1.3.0、およびモカ0.9.8を私のスタブに使用しています(これも学習中です...)
コントローラの仕様の中でテストすることについて話している場合、通常は
get :index
インデックスアクションへのHTTPリクエストを行うには、代わりに
xhr :get, :index
gETを使用して、インデックスアクションにXmlHttpRequest(AJAX)リクエストを送信します。
Rails 5.0(RSpec 3.X))なので、xhr: true
を次のように設定してみてください:
get :index, xhr: true
ActionController :: TestCase の関連コードは次のとおりです。 xhr
フラグを設定すると、次のヘッダーが追加されます。
if xhr
@request.set_header "HTTP_X_REQUESTED_WITH", "XMLHttpRequest"
@request.fetch_header("HTTP_ACCEPT") do |k|
@request.set_header k, [Mime[:js], Mime[:html], Mime[:xml], "text/xml", "*/*"].join(", ")
end
end
構文がRails 5およびrspec> 3.1の場合に少し変更されました(信じます)
POSTリクエストの場合:
post :create, xhr: true, params: { polls: { question: 'some' } }
明示的にparams
を設定する必要があります
gETリクエストの場合:
get :action, xhr: true, params: { id: 10 }
Rails 4およびrspec <= 3.1
xhr post :create, { polls: { question: 'some' } }
GETリクエスト:
xhr get :show, id: 10