4

我在我的应用程序中使用了可邀请的设计。我已经为一些自定义行为覆盖了设计邀请邀请控制器。当我尝试为此编写控制器测试时,出现以下错误:

NoMethodError: undefined method 'name' for nil:NilClass

这样做时会发生这种情况get :new

按照设置方向的指示设置路线:

devise_for :users, controllers: { sessions: 'users/sessions', invitations: 'users/invitations', registrations: :registrations }

控制器位于 /app/controllers/users/invitations_controller.rb 下,并且文件中的名称Users::InvitationsController与测试 /tests/controllers/users/invitations_controller.rb 相同Users::InvitationsControllerTest

这是测试:

context '#new' do
  context 'while not signed in' do
    should 'redirect to the login page' do
      get :new
      assert_redirected_to new_user_session_path
    end
  end
end

这是动作:

def new
  self.resource = resource_class.new
  self.resource.build_group if current_inviter.is_admin?
  self.resource.group = current_inviter.group if current_inviter.is_manager?
  render :new
end

感谢任何帮助谢谢。

4

1 回答 1

5

您需要在每个请求之前(或在设置块中)设置 Devise.mappings,如下所示 -

@request.env["devise.mapping"] = Devise.mappings[:user]

这是为了帮助在测试中正确设计路线图。

更多信息可以在这里找到 - https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4-(and-RSpec)

于 2014-06-20T07:53:41.313 回答