当我跑步时rake db:test:prepare
,
它会自动生成我的工厂:
require 'ffaker'
FactoryGirl.define do
factory :user do
sequence(:email) {|i| "marley_child#{i}@gmail.com" }
password 'secret_shhh'
end
factory :brain do
user FactoryGirl.create :user
end
end
然后,如果我尝试使用 运行rspec
甚至访问我的控制台rails c test
,我会收到一个验证错误:
/activerecord-3.2.6/lib/active_record/validations.rb:56:in `save!': Validation failed: Email has already been taken (ActiveRecord::RecordInvalid)
我的 Rspec:
describe '#email' do
context 'uniqueness' do
let(:user) { FactoryGirl.build :user, email: 'Foo@Bar.COM' }
subject { user.errors }
before do
FactoryGirl.create :user, email: 'foo@bar.com'
user.valid?
end
its(:messages) { should include(email: ['has already been taken']) }
end
end
对我来说没有意义的是我认为这些数据是事务性的。为什么我的工厂是在我根据数据而不是在每个测试中准备时生成的?最合适的方法是什么?