Pat*_*Pat 8 rspec ruby-on-rails devise
[好吧......我的第一个问题,所以要温柔.]
我正在使用设计进行身份验证,但我有自己的控制器来扩展创建用户时发生的事情.我在注册(注册)时创建了"用户"和"代理".
在路线......
devise_for :users, :controllers => {:registrations => "registrations"}
Run Code Online (Sandbox Code Playgroud)
我的完整控制器......
class RegistrationsController < Devise::RegistrationsController
def create
super # creates the @user
@agency = Agency.create! params[:agency]
@agency.users << @user
@agency.owner = @user
@user.agency = @agency
@agency.save
@user.account_admin = true
@user.save
end
end
Run Code Online (Sandbox Code Playgroud)
我的问题是我想设置一个rspec来检查这段代码.代码似乎工作正常,但我在我的规格中拍摄100%的代码覆盖率.这是我的整个规范......
require 'spec_helper'
describe RegistrationsController do
render_views
describe "POST create" do
it "creates an associated user" do
@agency = Factory.create( :agency )
@user = Factory.create( :user, :agency => @agency )
User.stub(:new).with({'name' => 'pat'}) { @user }
Agency.stub(:new).with({'name' => 'pat'}) { @agency }
post :create, :user => {'name' => 'pat'}
assigns(:user).should be(@user)
end
end
end
Run Code Online (Sandbox Code Playgroud)
但是,我在"post create"上收到错误.这是错误消息
Could not find devise mapping for path "/users?user[name]=pat"
Run Code Online (Sandbox Code Playgroud)
这是(我认为)"耙路线"的相关路线
user_registration POST /users(.:format) {:action=>"create",:controller=>"registrations"}
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
拍
Jos*_*lak 11
具体来说,从@shanethehat引用的链接复制一个片段
@request.env["devise.mapping"] = Devise.mappings[:admin]
Run Code Online (Sandbox Code Playgroud)
解决了问题中提出的问题.只需将该行放入before_filter适合您的Devise风格的控制器测试中.更改:admin为相关资源(通常:user)
原因是:SessionsController单独描述并不能唯一地标识特定的Devise资源.例如,如果您的应用admin和user资源,你可能会喜欢有2 SessionsController(S)与2台规格的-每个资源类型.
在这种情况下,对于在正确的资源上运行的每个测试,您需要告诉Devise SessionsController您对每组示例的意思.上面这一行就是这样.
| 归档时间: |
|
| 查看次数: |
3378 次 |
| 最近记录: |