设计/康康控制器测试sign_up失败 - rspec

时间:2014-01-21 16:31:42

标签: ruby-on-rails rspec devise simple-form cancan

我正在使用设计(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。也许我忘了一些配置?
谢谢大家,

PS:顺便说一句,我不知道这是否重要,但在我的用户模型中我有:
设计:database_authenticatable,:可恢复,:可记住,:可跟踪,:可验证,:可注册 努诺

1 个答案:

答案 0 :(得分:0)

经过多次头痛,我终于找到了解决方案。 Rails4又强大的参数。 在我的自定义registrations_controller中,我有一个强大的参数:

devise_parameter_sanitizer.for(:sign_up) << [:email]

这在浏览器中运行得很好......但是在测试中它失败了 所以,我改为:

params.require(:user).permit(:email, :password, :password_confirmation)

瞧! 我不知道为什么它在浏览器中起作用,任何解释都会很棒 然而,我为任何可能带有同样问题的人发布解决方案,并提高我的业力;)
此致