8

在我的 spec_helper.rb 我添加了

config.include Devise::TestHelpers, :type => :controller

在之前的控制器规范中:all hook 我正在尝试使用此代码登录用户

 @request.env["devise.mapping"] = Devise.mappings[:user]
 user = FactoryGirl.create(:confirmed_user)
 sign_in user

并得到 NoMethodError: undefined method `env' for nil:NilClass。

有任何想法吗?

4

4 回答 4

15

我已更改before(:all)before(:each),现在它可以工作了。看起来devise(使用的github主分支)和rspec2.14.1 之间的 API 不兼容。

于 2013-10-21T20:02:55.490 回答
1

@request.env["devise.mapping"] = Devise.mappings[:user]如果您正在为 Devise 的内部控制器编写规范,请注释掉该行。从设计文档中的测试助手部分引用。

于 2014-07-17T12:41:10.333 回答
0

控制器规范中将包含一个请求对象。您可能应该从 @request 更改为 request..

 request.env["devise.mapping"] = Devise.mappings[:user]
于 2013-10-21T08:38:05.450 回答
0

@request.env["devise.mapping"] = Devise.mappings[:user]仅当您测试设计控制器或从设计控制器继承的控制器时才需要,如设计文档中所述:

如果您正在测试Devise 内部控制器或从 Devise 继承的控制器,您需要在请求之前告诉 Devise 应该使用哪个映射。这是必要的,因为 Devise 从路由器获取此信息,但由于控制器测试不通过路由器,因此需要明确说明。 

如果您不是上述情况,则不需要添加它。如果您属于上述情况,但@requestnil尝试将这些助手添加到您的rails_helper.rb

  config.include Devise::Test::ControllerHelpers, type: :controller
于 2021-06-10T07:59:19.163 回答