rspec expect(user.save).to be_true 测试失败
rspec test failing on expect(user.save).to be_true
使用 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
感谢您提供的任何帮助。
将 be_true
更改为 eq true
。按照你的方式,它是在 TrueObject
.
上调用 #true
方法
尝试使用 be true
或 eq true
。但这只是问题的一部分,因为您似乎遇到了验证错误。为了调查 user.errors
.
中的此检查错误
似乎即使唯一的电子邮件测试通过了,要求唯一的用户名也阻止了保存。使用 Factory Girl 和 username#{n}
让我的测试通过了。
使用 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
感谢您提供的任何帮助。
将 be_true
更改为 eq true
。按照你的方式,它是在 TrueObject
.
#true
方法
尝试使用 be true
或 eq true
。但这只是问题的一部分,因为您似乎遇到了验证错误。为了调查 user.errors
.
似乎即使唯一的电子邮件测试通过了,要求唯一的用户名也阻止了保存。使用 Factory Girl 和 username#{n}
让我的测试通过了。