0

走る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

私にとって意味をなさないのは、このデータがトランザクションであると仮定したことです。各テスト内ではなく、データで準備するとファクトリが生成されるのはなぜですか? これを行う最も適切な方法は何ですか?

4

1 に答える 1