我在我的应用程序中使用了devise invitable。我已经为一些自定义行为重写了设计的可邀请邀请控制器。当我尝试为此编写控制器测试时,我得到了以下错误:
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谢谢你的帮助谢谢。
发布于 2014-06-20 15:53:41
您需要在每个请求之前(或在设置块中)设置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)
https://stackoverflow.com/questions/22309430
复制相似问题