この質問はこれと重複しているように見えるかもしれませんが、受け入れられた回答は私の問題には役立ちません。
環境
Rails 5 では、コントローラー テスト (現在は ActionDispatch::IntegrationTest から継承されています) でセッションを直接操作することはサポートされていないため、モック化とスタブ化という暗い道をたどっています。
これは悪い習慣であり、コントローラーをテストするためのより良い方法があることは知っています (そして、統合テストへの移行を理解しています) が、完全な統合テストを実行して、設定するためだけに 1 つのテストで複数のアクションを呼び出したくありません。特定のセッション変数。
シナリオ
Mochaを使用すると、セッション変数のモック/スタブは実際には非常に簡単です。
ActionDispatch::Request::Session.any_instance.stubs(:[]).with(:some_variable).returns("some value")
問題は、Railsがセッション内に多くのものを保存しsession.inspect
(ビューの 1 つのどこかで実行するだけ)、:[]
メソッドをスタブ化すると明らかにそれらのいずれにもアクセスできなくsession[:some_other_variable]
なることです (したがって、テストでは機能しなくなります)。
質問
:[]
特定のパラメーターで呼び出された場合にのみメソッドをスタブ/モックし、他のすべての呼び出しをスタブ化しない方法はありますか?
私は何かを望んでいただろう
ActionDispatch::Request::Session.any_instance.stubs(:[]).with(:some_variable).returns("some value")
ActionDispatch::Request::Session.any_instance.stubs(:[]).with(anything).returns(original_value)
しかし、私はそれを成し遂げる方法を見つけることができませんでした。