前提・実現したいこと
Pundit(gem)のメソッドpolicy
が使われているdecoratorのテストを書きたいのですがどのように書けばよいのかわからず。質問させてください。
発生している問題・エラーメッセージ
Failure/Error: h.policy(self).update? Devise::MissingWarden: Devise could not find the `Warden::Proxy` instance on your request environment. Make sure that your application is loading Devise and Warden as expected and that the `Warden::Manager` middleware is present in your middleware stack. If you are seeing this on one of your tests, ensure that your tests are either executing the Rails middleware stack or that your tests are using the `Devise::Test::ControllerHelpers` module to inject the `request.env['warden']` object for you.
該当のソースコード
ruby
1#user_decorator.rb 2 3def show_status 4 if active? 5 h.policy(self).update? 6 else 7 h.policy(self).destroy? 8 end 9end
ruby
1#user.rb 2 3enum status: { 4 active: 0, 5 inactive: 1 6 }
ruby
1#user_decorator_spec.rb 2 3RSpec.describe UserDecorator do 4 describe '#show_status' do 5 subject { build(:user, status: status).decorate } 6 7 where :status do 8 [ 9 0,1 10 ] 11 end 12 13 with_them do 14 its(:show_status) { is_expected.to eq true } 15 end 16 end 17end
試したこと
http://ohs30359.hatenablog.com/entry/2016/07/23/094933
を参考に
config.include Devise::Test::ControllerHelpers, type: :controller
を追加してみたが
エラーは変わらず。
以下のようにdecorator内のpolicy
メソッドを外すとDevise::MissingWarden:
のエラーも出ず、正常にテストが実行できた。
ruby
1#user_decorator.rb 2 3def show_status 4 if active? 5 # h.policy(self).update? 6 true 7 else 8 # h.policy(self).destroy? 9 false 10 end 11end
あなたの回答
tips
プレビュー