Ruby on rails RubyonRails应出现测试错误:新记录中缺少密码摘要
我正在尝试编写一个测试来验证电子邮件地址的唯一性 这是为了在Rails 4.0.0中创建一个新的用户帐户,并使用has_secure_密码 我得到了这个错误:Ruby on rails RubyonRails应出现测试错误:新记录中缺少密码摘要,ruby-on-rails,rspec,rspec-rails,shoulda,Ruby On Rails,Rspec,Rspec Rails,Shoulda,我正在尝试编写一个测试来验证电子邮件地址的唯一性 这是为了在Rails 4.0.0中创建一个新的用户帐户,并使用has_secure_密码 我得到了这个错误: User should require case sensitive unique value for email Failure/Error: it { should validate_uniqueness_of(:email) } RuntimeError: Password digest missi
User should require case sensitive unique value for email
Failure/Error: it { should validate_uniqueness_of(:email) }
RuntimeError:
Password digest missing on new record
# ./spec/models/user_spec.rb:8:in `block (2 levels) in <top (required)>'
以下是用户模型:
class User < ActiveRecord::Base
has_secure_password
validates :email, presence: true, uniqueness: true
validates :full_name, presence: true
validates :password_digest, presence: true
end
class用户
错误消息的意思是什么?我做错了什么?问题已解决。在每次测试之前,我添加了一行代码来创建用户对象,现在错误消失了
describe User do
# this before section solved the problem
before(:each) do
User.create(
full_name: "Bob",
email: "bob@bob.com",
password: "bob",
password_confirmation: "bob"
)
end
it { should validate_presence_of(:email) }
it { should validate_presence_of(:full_name) }
it { should validate_presence_of(:password_digest) }
it { should validate_uniqueness_of(:email) }
end
你的问题的答案如下: 目前的解决方案似乎是在测试唯一性之前创建一个新记录。简言之,以下是根本问题: Rails 4版本的
似乎有\u secure\u密码
添加了
在创建之前,确保已填写密码摘要
;然而,
Rails 3版本没有此检查
如果您提供不同的电子邮件,是否仍会抛出错误?我所做的是运行
bundle exec rspec
,而不提供电子邮件地址。在中,似乎没有输入电子邮件地址的要求。我甚至不知道在哪里输入电子邮件地址!如何在规范中生成User
对象?你能发布你的工厂/设备代码吗?现在我没有生成用户,这可能是问题的一部分!(60秒后…)拉杰什,你是个天才!我添加了User.create(全名:“Bob”,电子邮件:bob@bob.com,密码:“bob”,密码\u确认:“bob”)
在每次测试之前运行,解决了问题。请接受我的感谢和投票。同意它解决了问题。但是,为所有测试创建用户是不好的!只有唯一性验证需要数据库中已有的记录(或者它尝试使用选项:validate=>false
)创建新记录)。这就是你出错的原因。来源:Good point gotva。我将user\u spec.rb
更新为仅执行user.create(…)
上的应验证(:email)
的唯一性。谢谢你的提示。
describe User do
# this before section solved the problem
before(:each) do
User.create(
full_name: "Bob",
email: "bob@bob.com",
password: "bob",
password_confirmation: "bob"
)
end
it { should validate_presence_of(:email) }
it { should validate_presence_of(:full_name) }
it { should validate_presence_of(:password_digest) }
it { should validate_uniqueness_of(:email) }
end