何が起こっているのかと思うのは、FactoryGirl がn
からの呼び出しごとにそれをリセットしているということですautospec
が、データベースは空になっていません。
まず、この診断を確認するには、工場を次のように変更します。
Factory.define :email_address do |e|
e.sequence(:address) { |n| puts "Email ##{n}"; "factory_#{n}@example.com" }
e.validated true
end
私の診断が正しければ、次の 2 つの修正方法があります。
- FactoryGirl を、使用される最大 ID より大きいインデックスから開始するように変更します。これにはいくつかの深刻なハッキングが含まれ
Factory::Sequence
ます。おそらく、使用した最高のインデックスを記憶しているから にFactory::Sequence.sequences
変更する必要があります。実際、autospecはFactoryGirl クラスを適切にアンロードしているように見えるので、それはうまくいかないかもしれません(そうでなければ、シーケンス ルックアップは失敗せず、新しいオブジェクトが作成されません)。Hash[Symbol => Proc]
Hash[Symbol => [Proc, Integer]
Factory::Sequence
- autospec の実行ごとにデータベースがクリアされない理由を突き止めてください。分解方法を確認しましたか?テスト データベースはトランザクションをサポートしていますか?