我的设计控制器rspec中的“post create”问题

[好吧……我的第一个问题,所以要温柔。]

我正在使用设计进行身份validation,但我有自己的控制器来扩展创建用户时发生的事情。 我在注册时(注册)创建了“用户”和“代理商”。

在路线……

devise_for :users, :controllers => {:registrations => "registrations"} 

我的完整控制器……

  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 

我的问题是我想设置一个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 

但是,我在“post create”上收到错误。 这是错误消息

  Could not find devise mapping for path "/users?user[name]=pat" 

这是(我认为)“耙路线”的相关路线

  user_registration POST /users(.:format) {:action=>"create",:controller=>"registrations"} 

有什么想法吗?

具体来说,从@shanethehat引用的链接复制一个片段

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

解决了问题中提出的问题。 只需将该行放入before_filter进行Devise风格的控制器测试。 更改:admin对相关资源(通常为:user

原因是:单独描述SessionsController并不能唯一地标识特定的Devise资源。 例如,如果您的应用程序具有adminuser资源,您可能希望有2个SessionsController (包含2组规范) – 每种资源类型一个。

在这种情况下,对于每个在正确资源上运行的测试,您需要告诉Devise您的每个SessionsController对于每组示例都是什么意思。 上面这一行就是这样。