1

显然我有一个独特的情况,我在任何地方都找不到帮助。我正在尝试扩展我的注册流程以在我的数据库中创建额外的模型。这是我想做的基本流程:

  • 用户使用电子邮件/密码(以及其他模型值)注册
  • 系统创建一个“用户”模型
  • 系统创建一个“配置文件”模型
  • 系统创建“公司”模型
  • 系统创建一个“帐户”模型

最大的挑战是我正在使用 Devise,但我似乎无法找到一种方法来使用 Rspec 测试此功能。这是我简单地尝试测试“注册”方法的快速视图(这不起作用

describe "New Users" do
  describe "signing up" do
    it "should create a new user" do
      lambda do
        post :sign_up, :user => Factory.attributes_for(:user)
        response.should be_success
      end.should change(User, :count).by(1)
    end
  end
end

我收到以下错误:

1) UsersController New Users signing up should create a new user
 Failure/Error: post :sign_up, :user => Factory.attributes_for(:user)
 ActionController::RoutingError:
   No route matches {:user=>{:email=>"test@user.com", :password=>"secret", :password_confirmation=>"secret"}, :controller=>"users", :action=>"sign_up"}
 # ./spec/controllers/users_controller_spec.rb:14:in `block (5 levels) in <top (required)>'
 # ./spec/controllers/users_controller_spec.rb:13:in `block (4 levels) in <top (required)>'

设计路线配置我的用户注册路线如下:

new_user_registration GET    /users/sign_up(.:format)  {:action=>"new", :controller=>"devise/registrations"}

我一直在用这个把头发拉出来,似乎在这方面找不到任何帮助。也许我的做法是错误的,但我想在初始注册表单上配置设置用户帐户的所有方面(即他们的公司默认值、个人资料设置等)。首先,我需要弄清楚如何测试注册过程。

提前致谢!

4

2 回答 2

1

首先,您应该链接到的路线是,因为设计使用 POST 方法进行注册:

user_registration POST   /users(.:format)                   devise/registrations#create

也许您可以尝试传递语法,例如:

it "should create a new user" do
expect {
  post :create, user: FactoryGirl.attributes_for(:user)
  response.should be_redirect
}.should change(User, :count).by(1)
end

编辑 好吧,我可能想出了如何解决路由问题,我添加了一个新控制器:

UsersController < Devise::RegistrationsController 

并在那里添加了方法sign_up。然后在 routes.rb 我添加了这段代码:

devise_for :users
devise_scope :user do
 post "/sign_up", :to => "devise/registrations#create"
end

最后将测试前的这一行放入测试中:

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

但是我在验证方面存在问题,但我认为它适用于我的应用程序,因为我只是在现有系统的新分支中制作了它。希望它可以帮助你。尽管如此,我认为这种方法非常hack或不常见。我宁愿采用推荐的设计方法。您始终可以使用 FactoryGirl 即此链接创建用户依赖项。希望它会帮助你。

顺便说一句,关于登录的废话帖子很抱歉:)我累了:)

于 2012-07-10T06:30:35.813 回答
0

是不是

post :users 

new_user_registration路由重定向到包含表单(用户操作)的页面,new而不是create用户操作。你应该在你的路线中找到类似的东西:

user_registration POST /users {:action => "create", :controller => "devise/registrations"}

检查你rake routes

于 2012-07-02T09:07:09.467 回答