我正在使用Devise和Rails 4.2上的可确认模块。我使用ConfirmationsController
after_confirmation_path_for
编写了自定义/app/auth
。我正在测试的基本场景是:
scenario 'A user can confirm their account by clicking a link in the email' do
user = create(:user, email: 'bob@acme.com')
open_email(user.email)
expect(current_email.subject).to eq('Finish creating your account on Hourglass')
current_email.click_link 'Create an account on Hourglass'
expect(user.reload.confirmed_at).not_to be_nil
expect(current_path).to eq('/app/auth')
end
哪个有效。但是,在生产中(应用程序部署在Heroku上),我收到以下错误:
NoMethodError (undefined method `flash' for #<ActionDispatch::Request:0x007f68c8a29120>):
vendor/bundle/ruby/2.0.0/gems/actionpack-4.2.0/lib/action_controller/metal/flash.rb:9:in `flash'
vendor/bundle/ruby/2.0.0/gems/devise-3.5.3/app/controllers/devise_controller.rb:153:in `set_flash_message'
vendor/bundle/ruby/2.0.0/gems/devise-3.5.3/app/controllers/devise/confirmations_controller.rb:25:in `show'
在默认控制器的show
方法中为this line。
还有一些关于如何解决这个问题的其他问题,但它们针对的是rails-api应用程序;我的应用程序是一个完整的rails应用程序。
通过将以下配置添加到我的application.rb
:
config.middleware.use ActionDispatch::Flash
但我想(1)理解为什么只在生产中发生这种情况,并且(2)有一个规范来保证这个功能正在发挥作用。