Ruby on rails 为什么此Rspec测试返回“0”;电子邮件已被接收”;
这是我的规范文件,当添加上下文测试“不作为信号更新用户平衡”时,我得到以下错误Ruby on rails 为什么此Rspec测试返回“0”;电子邮件已被接收”;,ruby-on-rails,rspec,factory-bot,Ruby On Rails,Rspec,Factory Bot,这是我的规范文件,当添加上下文测试“不作为信号更新用户平衡”时,我得到以下错误 require 'spec_helper' describe Sale do context 'after_commit' do context 'assignable' do sale = FactoryGirl.create(:sale, earned_cents: 10, assignable: true) after { sale.run_callbacks(:c
require 'spec_helper'
describe Sale do
context 'after_commit' do
context 'assignable' do
sale = FactoryGirl.create(:sale, earned_cents: 10, assignable: true)
after { sale.run_callbacks(:commit) }
it 'updates user balance' do
sale.user.balance.should == sale.earned
end
end
context 'not assignable' do
sale = FactoryGirl.create(:sale, earned_cents: 10, assignable: false)
after { sale.run_callbacks(:commit) }
it 'does not updates user balance' do
sale.user.balance.should_not == sale.earned
end
end
end
end
工厂呢
require 'faker'
FactoryGirl.define do
factory :user do
email Faker::Internet.email
password "mypassword"
end
FactoryGirl.define do
factory :sale do
earned_cents 5
user
end
end
在/spec/spec\u helper.rb
上,我也有这个
require 'database_cleaner'
RSpec.configure do |config|
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
这就是我得到的错误
“保存!”:验证失败:已接收电子邮件(ActiveRecord::RecordInvalid)
我猜它与
Sale
工厂内的user
引用有关,但我不知道为什么它不为第二次测试生成新用户或从数据库中删除它。有什么想法吗?在您的用户工厂中,尝试以下方法:
factory :user do
email { Faker::Internet.email }
password "mypassword"
end
为什么必须用花括号括起来:以避免缓存值
运行工厂(:user)
块
定义工厂时,而不是每次创建记录时。所以
如果Factory::Internet.email
评估为foo@bar.com
第一次,
然后,工厂将尝试创建所有后续用户
同样的电子邮件!)(根据@kristinalim,语法编辑)
对
工厂(:user)
块在定义工厂时运行,而不是每次创建记录时都运行。因此,如果Factory::Internet.email
评估为“foo@bar.com“第一次,做email Faker::Internet.email
就像做email'foo@bar.com“
。组成块的大括号,是什么使此电子邮件生成方法能够在这种情况下多次重新运行。感谢@kristinalim和@schwabsauce解释了为什么此anwser是正确的;)