4

コントローラのテストとWardenの使用に問題があります。

すべての例はスタブを指していrequest.env['warden']ます。これにより、を呼び出すときにコントローラーで問題が発生し、env['warden']が返されますnil

大まかな例として、これを使用します。

request.env['warden'] = double(Warden, :authenticate => nil,
                                          :authenticate! => nil,
                                          :authenticated? => false)

そして、このような単純なビフォアフィルター:

before_filter do
  redirect_to new_user_session_url unless env['warden'].authenticated?
end

取得しnilます。

私はそれを使用controller.env['warden'] = ...して動作させることができました、そしてそれは動作します。これは理にかなっています。コントローラーレベルにあるので、私の質問は、すべての例を見たときに何が機能しないのかということだと思います。

私はこれを持っていますspec_helper

config.include Warden::Test::Helpers

どんな助けでも素晴らしいでしょう!

4

2 に答える 2

4

Wardenのコントローラーテストヘルパーを作成しました。

http://kentaroimai.com/articles/1-controller-test-helpers-for-warden

于 2012-06-22T16:15:24.890 に答える
1

env['warden']RailsアプリにWardenを実装するように指示する多くの例にもかかわらず。を介してアクセスする正しい方法のようrequest.env['warden']です。

テスト中にコントローラーのenvを上げることでこれを見つけましたが、これは常に出てきましたnil

Warden、https://github.com/hassox/warden/blob/master/lib/warden/proxy.rb#L13にあるよう です。ラック環境用のアクセサーがありますが、これはテストモードでは存在しません。コントローラテストにラックがない。誰かがこれをチェックしてください。

したがってrequest.env、RSpecでスタブする場合、実装はを指す必要がありますrequest.env

それは私の心の中で必要な悪のようです。しかし、良い説明や回避策を持っている人がいれば、この議論を続けたいと思います。

于 2012-02-14T12:11:19.517 に答える