ruby-on-rails – 我的设计控制器rspec中的“post create”问题

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 我的设计控制器rspec中的“post create”问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
[好吧……我的第一个问题,所以要温柔.]

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

在路线……

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

我的完整控制器……

  1. class RegistrationsController < Devise::RegistrationsController
  2. def create
  3. super # creates the @user
  4. @agency = Agency.create! params[:agency]
  5. @agency.users << @user
  6. @agency.owner = @user
  7. @user.agency = @agency
  8. @agency.save
  9. @user.account_admin = true
  10. @user.save
  11. end
  12. end

我的问题是我想设置一个rspec来检查这段代码.代码似乎正在工作,但我在我的规格中拍摄100%的代码覆盖率.这是我的整个规范……

  1. require 'spec_helper'
  2. describe RegistrationsController do
  3. render_views
  4. describe "POST create" do
  5. it "creates an associated user" do
  6. @agency = Factory.create( :agency )
  7. @user = Factory.create( :user,:agency => @agency )
  8. User.stub(:new).with({'name' => 'pat'}) { @user }
  9. Agency.stub(:new).with({'name' => 'pat'}) { @agency }
  10. post :create,:user => {'name' => 'pat'}
  11. assigns(:user).should be(@user)
  12. end
  13. end
  14. end

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

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

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

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

有什么想法吗?

解决方法

具体来说,从@shanethehat引用的链接复制一个片段
  1. @request.env["devise.mapping"] = Devise.mappings[:admin]

解决了问题中提出的问题.只需将该行放入before_filter中,即可进行Devise风格的控制器测试.更改:管理员对相关资源(通常为:用户)

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

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

猜你在找的Ruby相关文章