显然我有一个独特的情况,我无法在任何地方找到帮助。我正在尝试扩展我的注册过程,以便在我的数据库中创建额外的模型。这是我想要做的基本流程:
最大的挑战是我正在使用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"}
我一直把头发拉出来,似乎在这方面找不到任何帮助。也许我接近它是错误的,但我想在初始注册表单上配置设置用户帐户的所有方面(即公司默认设置,配置文件设置等)。首先,我需要弄清楚如何测试注册过程。
提前致谢!
答案 0 :(得分: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]
但我有验证问题,但我认为这是我的应用程序,因为我只是在现有系统的新分支中。希望它可以帮到你。尽管如此,我认为这种方法很常见或不常见。我宁愿选择recommended设计方法。您始终可以使用FactoryGirl创建用户依赖项,即link。希望它会对你有所帮助。
BTW Sry关于登录的无意义帖子:)我累了:))
答案 1 :(得分:0)
不是吗
post :users
new_user_registration
路由重定向到包含表单(new
用户操作)的页面,而不是create
用户操作。您应该在路线中找到类似的东西:
user_registration POST /users {:action => "create", :controller => "devise/registrations"}
检查rake routes
。