2012-05-05 18 views
0

私は、電子メールアドレスを生成するには、次のコードを使用しています。しかしFactoryGirlデータベースで同じメールを生成するシーケンスを繰り返し

factory :user do 
    sequence(:username) {|n| "person#{n}"} 
    email { generate :email } 
    password 'password' 
    password_confirmation { |u| u.password } 
end 

:ユーザーを生成するために、次に

sequence :email do |n| 
    "person#{n}@example.com" 
end 

を、私は次のコードを使用しますテストを実行すると、常に "[email protected]"が生成されます。それは決して '2'に増加しません。

"[email protected]"というエラーメッセージがデータベースに既に存在します。

FactoryGirlを増分する方法を教えてください。

+0

属性として使用するとどうなりますか? 'factory(:user){email}' – three

+0

どうやってそれをしますか?私は別のファクトリ(:user)を 'email'だけで追加しようとしましたが、TOP => test:prepare => db:test:prepare => db:abort_if_pending_migrations => environmentというエラーメッセージが表示されました – Castielle

+0

私はFactoryGirl githubリポジトリのGet Startedファイルを参照しています:https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#sequences – three

答えて

0

単一のテストでユーザーを生成するときにこのメッセージが表示されたら、はい、固有の電子メールを生成することが問題になります。しかし、テストデータベースがクリーンでないため(ユーザーは以前のテストから残されているため)、この種のエラーメッセージを受け取ることができます。不確かな場合は、テストログを確認してください。

+0

わかりました。問題はテストデータベースではなく、実際のデータベースで実際にデータベースに保存されるため、統合テストであるためサインアッププロセス中に問題が発生しました。私はそのための修正がないと思う。 – Castielle

+0

あなたは私をそこに失ってしまった。 「ライブデータベース」とは何ですか?通常、テスト、開発、および運用データベースがあります。あなたの質問から、それが統合テストかどうかは明らかではありませんが、それはなぜ重要ですか?それはFactoryGirlで、データベースに書き込みます。あなたがしたくない場合は、何らかのモックを使用する必要があります。 –

+0

私は開発データベースを意味しました。たとえば、FactoryGirlを使用して新しいユーザーの作成をテストする統合テストを実行すると、新しいユーザー「[email protected]」が作成されます。次回の統合テストを実行するときに、新しいユーザー '[email protected]'を作成しようとしますが、同じ電子メールをデータベースに保存できないため、テストは機能しません。では、FactoryGirlにデータベースに '[email protected]'がすでにあることを知ってもらうために、FactoryGirlは '1'、つまり '[email protected]'ではなく '2'でシーケンスを開始する必要があることを知っています。 – Castielle

関連する問題