30

session[:referred_by]使用しないようにしていますが、を使用したいと思いますrequest.referrerTestRequestただし、が保存されていないため、RSpecテストは失敗します。request.referrer

したがって、Rspecテストを機能させるには、次のことを行う必要があります。それを改善する方法はありますか?

referrer = request.referrer ? request.referrer : '/'
redirect_to referrer, :alert => error_message
4

7 に答える 7

47

ActionDispatch::TestRequest拡張ActionDispatch::Requestする拡張しますRack::Request

メソッドは次のように定義されます。

def referer
  @env['HTTP_REFERER']
end
alias referrer referer

私が覚えている限りでは、RSpec テストでは を使用して環境変数にアクセスできますrequest.env。つまり、次のように設定できるはずです

request.env['HTTP_REFERER'] = 'http://example.com'

もちろん、使用している RSpec サンプル グループの種類によって異なります。

于 2012-09-25T22:47:58.970 に答える
29

モックする:

specify 'foo' do
  controller.request.should_receive(:referer).and_return('http://example.com')
  # get whatever
end

または、呼び出されなくてもかまわない場合は、スタブします。

controller.request.stub referer: 'http://example.com'
于 2012-09-25T22:11:21.360 に答える