RSpec给出了ActiveModel :: MassAssignmentSecurity :: Error

Yog*_*oli 4 rspec mass-assignment ruby-on-rails-3 railstutorial.org

我正在关注Railstutorial.org并在使用Rspec时收到MassAssignment Error.

10) User when email format is invalid should be invalid
     Failure/Error: @user = User.new(name:"Example", email:"example@gmail.com",
     ActiveModel::MassAssignmentSecurity::Error:
       Can't mass-assign protected attributes: password, password_confirmation
Run Code Online (Sandbox Code Playgroud)

可能是因为我尝试在RSpec中的变量之前分配:

  ...
  before do
     @user = User.new(name:"Example", email:"example@gmail.com", 
                                password: "foobar", password_confirmation: "foobar" )
  end

  subject { @user }
  ...
Run Code Online (Sandbox Code Playgroud)

是否可以在开发或测试模式下禁用MassAssignment保护?或者当RSpec运行时?任何帮助都会很棒!谢谢

zet*_*tic 7

你可以避免批量分配:

before do
  @user = User.new(name:"Example", email:"example@gmail.com").tap do |u|
    u.password = "foobar"
    u.password_confirmation = "foobar"
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 这里记录了"tap":http://ruby-doc.org/core-1.9.3/Object.html#method-i-tap.请注意,1.9之前的"tap"可作为Rails的扩展:http://apidock.com/rails/v2.3.8/Object/tap (2认同)