1

Rspecでコントローラーのこの部分をテストしようとしています:

def popup_company
  if params[:partial].present?
    render partial: "popup_company/pages", locals: { tab_filter: params[:tab_filter] }
  end
end

上記の部分をテストするためのコントローラーの仕様は次のとおりです。

controller.should_receive(:render).with({
:partial => 'popup_company/pages',
:locals => {tab_filter: params[:tab_filter]}
})

ただし、次のエラーが発生します。

undefined local variable or method `params'

皆さん、このエラーを克服するために何を変更すればよいか教えてください。私はあなたの助けに感謝します!

4

2 に答える 2

0

あなたparamsは仕様側のコードにあります。ローカル変数になろうとしているだけです。含まれていると思われるものは何でも入れてくださいparams[:tab_filter]

そして、一般的に、テストを書くべきではありません - おっと、私は「例」を意味します - コードが言っていることを単に繰り返すだけです。コントローラーがパーシャルを呼び出してもかまいません。コントローラーがそのような値を含む HTML で応答することを気にします。

于 2013-11-01T15:45:04.183 に答える
0

したがって、 params[:tab_filter] はリクエストに含まれているため、おそらく get に含まれています。つまり、次のようなものがあります。

get :popup_company, tab_filter: 'XXXXX', partial: 'YYYYY'

あなたの仕様で。tab_filter パラメーターに変数のランダム値を作成し、それを使用して適切な値がレンダリングに渡されていることを検証する必要があります。何かのようなもの

tab_filter = SecureRandom.hex(10)
get :popup_company, tab_filter: tab_filter, partial: 'YYYYY'
controller.should_receive(:render).with({
  partial: 'popup_company/pages',
  locals: { tab_filter: tab_filter } })

または、スペックを使用render_template('popup_company/pages')してテンプレートがレンダリングされていることを確認し、レンダリングされたビューのコンテンツに基づいてタブ フィルターをテストすることもできます。

于 2013-11-01T15:45:44.670 に答える