Dav*_*ite 30 routing routes ruby-on-rails devise ruby-on-rails-3
我希望覆盖Devise::RegistrationsController实现一些自定义功能.为此,我创建了一个RegistrationsController像这样的新东西:
# /app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
def new
super
end
end
Run Code Online (Sandbox Code Playgroud)
并设置我的路线,如下所示:
devise_for :users, :controllers => { :registrations => "registrations" }
Run Code Online (Sandbox Code Playgroud)
并试图像这样测试它:
describe RegistrationsController do
describe "GET 'new'" do
it "should be successful" do
get :new
response.should be_success
end
end
end
Run Code Online (Sandbox Code Playgroud)
但这给了我一个错误:
1) RegistrationsController GET 'new' should be successful
Failure/Error: get :new
AbstractController::ActionNotFound:
Could not find devise mapping for path "/users/sign_up".
Maybe you forgot to wrap your route inside the scope block? For example:
devise_scope :user do
match "/some/route" => "some_devise_controller"
end
# ./spec/controllers/registrations_controller_spec.rb:13:in `block (3 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)
那么我做错了什么?
Dav*_*ite 47
问题是Devise无法将测试路由映射回原始控制器.这意味着,如果您的应用程序在浏览器中打开它实际上工作正常,您的控制器测试仍将失败.
解决方案是在每次测试之前将设计映射添加到请求中,如下所示:
before :each do
request.env['devise.mapping'] = Devise.mappings[:user]
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5874 次 |
| 最近记录: |