【发布时间】:2020-09-30 01:51:41
【问题描述】:
我正在审查 rspec 测试并试图了解以下代码的作用。
before do
@request.env["devise.mapping"] = Devise.mappings[:user]
setup_controller_for_warden
@user = create(:user)
end
【问题讨论】:
-
这似乎是一个让 Devise 与控制器规范一起工作的 hacky 解决方案。设计是基于中间件的,控制器测试不通过中间件堆栈。如果您有一个带有控制器规格的遗留应用程序,您希望包含
include Devise::Test::ControllerHelpers。对于新应用程序,Rails 团队不鼓励您使用集成测试/规范作为控制器测试/规范。 -
请注意,添加
include Devise::Test::ControllerHelpers将不允许您删除@request.env["devise.mapping"] = Devise.mappings[:user]。无论如何,对于主题是设计控制器或从设计控制器继承的控制器的任何控制器测试,它都应该存在
标签: ruby-on-rails devise ruby-on-rails-6