使用rails 4.1.8和rspec 3.2.1
此测试在我的rspec gem为2.0的其他应用程序中通过。
它也适用于开发模式。如果我使用全部大写的电子邮件创建用户,它将以小写形式保存在数据库中。
这是我的失败信息:
Failures:
1) User validations #downcase_email downcases an email before saving
Failure/Error: expect(user.save).to be_true
expected false to respond to `true?`
# ./spec/models/user_spec.rb:52:in `block (4 levels) in <top(required)>'
测试:
require 'rails_helper'
describe User do
let(:valid_attributes) {
{
user_name: "username",
email: "user@email.com",
password: "password",
password_confirmation: "password"
}
}
describe "#downcase_email" do
it "downcases an email before saving" do
user = User.new(valid_attributes)
user.email = "USER@EMAIL.COM"
expect(user.save).to be_true
expect(user.email).to eq("user@email.com")
end
end
end
我的用户模型:
class User < ActiveRecord::Base
has_secure_password
validates :user_name, presence: true,
uniqueness: true
validates :email, presence: true,
uniqueness: true,
format: {
with: /\A[A-Za-z0-9._%+-]+@[A-Za-z0-9\.-]+\.[A-Za-z]+\Z/
}
before_save :downcase_email
def downcase_email
self.email = email.downcase
end
end
感谢您提供的任何帮助。
答案 0 :(得分:2)
尝试使用be true
或eq true
。但这只是问题的一部分,因为您似乎有验证错误。要调查user.errors
。
答案 1 :(得分:1)
将be_true
更改为eq true
。按照您的方式,它在#true
上调用TrueObject
方法。
答案 2 :(得分:-1)
即使传递了一个独特的电子邮件测试,但是需要一个唯一的用户名才能阻止保存。使用username#{n}
的Factory Girl让我的测试通过。