RSpec测试失败,出现'未知属性'

时间:2012-08-19 08:13:58

标签: ruby-on-rails ruby rspec attr-accessible

我在我的模型中测试属性响应:

it { should respond_to(:password) }
it { should respond_to(:password_confirmation) }

这些属性不是数据库的一部分,只是在我的模型中声明为attr_accessible。当我没有声明它们并运行我的测试时,我得到:

ActiveModel::MassAssignmentSecurity::Error:
  Can't mass-assign protected attributes: password, password_confirmation

但在我宣布之后我得到了:

ActiveRecord::UnknownAttributeError:
  unknown attribute: password

知道为什么会这样吗?

2 个答案:

答案 0 :(得分:3)

@ 8vius因为你正在学习本教程,但还不够。 您需要添加以下行:

has_secure_password
下面

    attr_accessible:email,:name,:role,:password,:password_confirmation

这允许您将纯文本密码和password_confirmation保存到内存中,以便在加密和保存到数据库之前比较字符串并强制执行相等操作。您不希望在db上以纯文本形式保存密码。

答案 1 :(得分:2)

attr_accessible告诉Rails你允许对属性进行所谓的质量分配。

但是属性必须存在于db中,或者您应该创建getter / setter,最简单的方法是:

attr_accessor :password_confirmation, :password

无论如何,听起来很奇怪,你不存储密码。