我正在使用设计(3.2.2),cancan(1.6.10),simple_form(3.0.0)。 我强调Devise Registration Controller只允许管理员签名用户,就像在Tony教程中那样:http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/
它与我的开发服务器一起工作正常,但测试失败了,使用了rspec。
**class UsersDeviseRegistrationTest < ActionController::TestCase**
include Devise::TestHelpers
tests Users::Devise::RegistrationsController
fixtures :users
setup do
@nuno = users(:nuno)
@newClient = {
email: 'cliNew@cliOne.com',
password: '12345678',
password_confirmation: '12345678'
}
request.env['devise.mapping'] = Devise.mappings[:user]
end
test "Only admin can create client" do
sign_in @nuno
get :new
assert :success
assert_difference('User.count') do
post :create, user: @newClient
puts response.body
end
assert :success
assert_redirected_to user_path(assigns(user))
sign_out @nuno
end
end
创建用户失败了...... 分析它所说的回应:
5个错误禁止此用户保存:
Email can't be blank
Email is empty.
Email is invalid
Password can't be blank
Encrypted password can't be blank**
有没有人有任何想法?我已经在不同的演示项目中进行了这种测试,但在那种情况下我没有使用cancan。也许我忘了一些配置?
谢谢大家,
答案 0 :(得分:0)
经过多次头痛,我终于找到了解决方案。 Rails4又强大的参数。 在我的自定义registrations_controller中,我有一个强大的参数:
devise_parameter_sanitizer.for(:sign_up) << [:email]
这在浏览器中运行得很好......但是在测试中它失败了 所以,我改为:
params.require(:user).permit(:email, :password, :password_confirmation)
瞧!
我不知道为什么它在浏览器中起作用,任何解释都会很棒
然而,我为任何可能带有同样问题的人发布解决方案,并提高我的业力;)
此致