35

コントローラーのアクションが次のようになっている場合:

respond_to do |format|
  format.html { raise 'Unsupported' }
  format.js # index.js.erb
end

機能テストは次のようになります。

test "javascript response..." do
  get :index
end

Respond_to ブロックの HTML ブランチを実行します。

これを試してみると:

test "javascript response..." do
  get 'index.js'
end

コントローラーアクションを実行せずにビュー (index.js.erb) を実行します!

4

9 に答える 9

63

通常のパラメーターで a を渡し、:formatその形式で応答をトリガーします。

get :index, :format => 'js'

リクエスト ヘッダーをいじる必要はありません。

于 2010-03-01T19:32:33.200 に答える
25

rspecを使用:

it "should render js" do
  xhr :get, 'index'
  response.content_type.should == Mime::JS
end

コントローラーのアクション:

respond_to do |format|
  format.js
end
于 2010-06-12T06:23:27.030 に答える
5

受け入れられるコンテンツ タイプを必要なタイプに設定します。

@request.accept = "text/javascript"

これをテストと組み合わせるとget :index、コントローラーへの適切な呼び出しが行われます。

于 2010-03-01T19:20:36.177 に答える
3

リクエストの前にこれを使用してください:

@request.env['HTTP_ACCEPT'] = 'text/javascript'
于 2010-03-01T18:52:55.467 に答える
1

これら3つは同等のようです:

  1. get :index, :format => 'js'
  2. @request.env['HTTP_ACCEPT'] = 'text/javascript'
  3. @request.accept = "text/javascript"

それらはコントローラーに js テンプレート (例: index.js.erb) を使用させます。

XHR リクエストのシミュレーション (HTML スニペットの取得など) では、次のように使用できます。 @request.env['HTTP_X_REQUESTED_WITH'] = "XMLHttpRequest"

これはrequest.xhr? true を返します。

XHR をシミュレートするときに、予期される形式を指定する必要があったか、エラーが発生したことに注意してください。

get :index, format: "html"

Rails 3.0.3 でテスト済み。

Rails のソースから後者を入手しました

于 2011-05-18T11:17:56.310 に答える
0

パラメータやユーザー ID などにこのようなコードを使用します。フォーマット オプションは、id や nested_attributes などの他のパラメータと同じハッシュにあることに注意してください。

put :update, {id: record.id, nested_attributes: {id: 1, name: "John"}, format: :js}, user.id
于 2014-02-18T19:14:54.573 に答える
0

上記の回答の多くは時代遅れです。

RSpec 3+でそれを行う正しい方法はpost some_path, xhr: true.

使用しようとすると、RSpec 自体から非推奨の警告が表示されますxhr :post, "some_path":

DEPRECATION WARNING: `xhr` and `xml_http_request` are deprecated and will be removed in Rails 5.1.
Switch to e.g. `post comments_path, params: { comment: { body: 'Honey bunny' } }, xhr: true`.

また、 ではxhr :post, "some_path"発生しないファンキーなエラーが発生しpost some_path, xhr: trueます。

于 2017-08-05T03:20:58.257 に答える