走るrake db:test:prepare
と、
私の Factory を自動的に生成します:
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
私にとって意味をなさないのは、このデータがトランザクションであると仮定したことです。各テスト内ではなく、データで準備するとファクトリが生成されるのはなぜですか? これを行う最も適切な方法は何ですか?