【发布时间】:2013-09-09 02:20:11
【问题描述】:
我正在尝试编写一个测试来验证电子邮件地址的唯一性。
这是为了在 Rails 4.0.0 中创建一个新的用户帐户并使用 has_secure_password。
我收到此错误:
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)>'
user_spec.rb:
require "spec_helper"
describe User do
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
这是用户模型:
class User < ActiveRecord::Base
has_secure_password
validates :email, presence: true, uniqueness: true
validates :full_name, presence: true
validates :password_digest, presence: true
end
错误消息是什么意思,我做错了什么?
【问题讨论】:
-
如果您提供不同的电子邮件,是否仍然会抛出错误?
-
我正在做的是运行
bundle exec rspec而不提供电子邮件地址。在docs for shoulda 中,似乎不需要输入电子邮件地址。我什至不确定在哪里输入电子邮件地址! -
如何在规范中生成
User对象?您可以为此发布您的工厂/夹具代码吗? -
此时我没有生成用户,这可能是问题的一部分! (60 秒后……) Rajesh,你真是个天才!我添加了
User.create(full_name: "Bob", email: "bob@bob.com", password: "bob", password_confirmation: "bob")在每次测试之前运行,这解决了问题。有我的感谢和支持。
标签: ruby-on-rails rspec rspec-rails shoulda