ActionController::设备注册控制器的UrlGenerationError



我在测试我的自定义设备User::RegistrationsController时遇到了一个有趣的ActionController::UrlGenerationError

错误如下:

ActionController::UrlGenerationError:
No route matches {:action=>"create", :controller=>"user/registrations", :user=>{:name=>"Adriane Koepp", :city=>"Nidiafurt", :address=>"14955 Cormier Viaduct", :country=>"Mozambique", :email=>"moshe@kozey.com", :phone_primary=>"(295) 491-0447 x9108", :phone_secondary=>"536.985.9499 x7264", :postal_code=>"93438-7448", :province=>"South Carolina", :password=>"MaH9R5G8XqB", :pets_attributes=>[{:name=>"Patches", :chip_number=>"149793073311890", :species=>"iusto"}]}}

这个错误显示在我对这个控制器的所有测试中,但为了简单起见,我只列出create操作的一个测试:

it 'creates a new User' do
expect do
post :create, params: { user: valid_attributes }
end.to change(User, :count).by(1)
end

routes.rb包含:

devise_for :users, controllers: {
registration: 'user/registration'
}

我可以在http://localhost:3000/users/sign_up导航到我的注册页面,但出于某种原因,我的测试似乎认为这个控制器没有用于create操作的有效URL。为什么会这样?

附加步骤

根据D1ceWard的建议,我在路由中用复数形式"registration",现在错误消息变为AbstractController::ActionNotFound错误。我根据文档进行了反驳,并在测试的顶部添加了以下块:

before(:each) do
@request.env['devise.mapping'] = Devise.mappings[:user]
end

您的错误是由于缺少复数引起的,devise不知道registration是什么,但可以使用registrations

解决方案:

# routes.rb
devise_for :users, controllers: {
registrations: 'user/registrations'
}

您可以使用rails routes来检查所有存在的路由。

设计关于自定义控制器的文档

相关内容

  • 没有找到相关文章

最新更新