在我的spec_helper.rb中,我添加了
config.include Devise::TestHelpers, :type => :controller
在之前的控制器规范中:所有钩子我试图使用此代码登录用户
@request.env["devise.mapping"] = Devise.mappings[:user]
user = FactoryGirl.create(:confirmed_user)
sign_in user
并获取NoMethodError:nil的未定义方法`env':NilClass。
有什么想法吗?
答案 0 :(得分:15)
我已将before(:all)
更改为before(:each)
,现在可以正常使用了。看起来devise
(使用github
主分支)和rspec
2.14.1之间的API不兼容。
答案 1 :(得分:1)
如果您正在为Devise的内部控制器编写规范,请注释掉@request.env["devise.mapping"] = Devise.mappings[:user]
行。参考Devise docs中的测试助手部分。
答案 2 :(得分:0)
控制器规范中将包含一个请求对象。您应该从@request更改为请求..
request.env["devise.mapping"] = Devise.mappings[:user]
答案 3 :(得分:0)
@request.env["devise.mapping"] = Devise.mappings[:user]
仅在您测试设计控制器或从设计控制器继承的控制器时才需要,如设计 documentation 中所述:
如果您正在测试 Devise 内部控制器或继承自 Devise 的控制器,您需要在请求之前告诉 Devise 应该使用哪个映射。这是必要的,因为 Devise 从路由器获取此信息,但由于控制器测试不通过路由器,因此需要明确说明。
如果您不是上述情况,则无需添加。
如果您属于上述情况,但 @request
是 nil
,请尝试将这些帮助程序添加到您的 rails_helper.rb
:
config.include Devise::Test::ControllerHelpers, type: :controller