次の工場からユーザー、クライアント、請求書を生成します
FactoryGirl.define do
factory :user do
sequence(:email) { |n| "person_#{n}@example.com" }
password "foobar"
password_confirmation "foobar"
end
factory :client do
sequence(:name) { |n| "Client Name #{n}" }
sequence(:address1) { |n| "#{n} Street name" }
sequence(:address2) { |n| "#{n} Area name" }
city "Chennai"
state "Tamil Nadu"
country "India"
zipcode "600001"
contactname "Sathish Manohar"
sequence(:email) { |n| "person_#{n}@example.com"}
user
end
factory :invoice do
client
end
end
私はいくつかのリクエストとモデルの仕様を持っています、以下は私が持っている主なリクエストの仕様です:
https://gist.github.com/4418869 --clients_pages_spec.rb
https://gist.github.com/4418876 --invoices_pages_spec.rb
呼び出しですべてusers
が削除されたafter(:all) { User.delete_all }
場合、を使用して順番に実行すると、すべてのテストに合格します。bundle exec rspec spec --order default
ですべてusers
が削除されていない場合after(:all) { User.delete_all }
、テストの実行中に電子メールの一意性エラーが表示されます。factory_girl
各ユーザーのメールの一意性を検証するのはdeviseのエラーなので、2回目のテストを実行するときは、同じユーザーを作成しようとする と思います。
これはエラーメッセージです:
/home/sathish/.rvm/gems/ruby-1.9.3-p194@invoice_jet/gems/activerecord-3.2.8/lib/active_record/validations.rb:56:in `save!': Validation failed: Email has already been taken (ActiveRecord::RecordInvalid)
このエラーメッセージを取り除き、正しい方法でテストするためのデバイスユーザーを作成するにはどうすればよいですか?
背景情報:
spec_helper.rb
データベースとしてmysqlをconfig.use_transactional_fixtures = true
使用しており、すべてのテーブルがInnoDB
エンジン を使用しています