18

ここで説明されている問題と同様: http://rpheath.com/posts/411-how-to-use-factory-girl-with-rspec

要するに(短縮コード):

spec_helper:

config.use_transactional_fixtures = true
config.use_instantiated_fixtures  = false

factory.rb:

Factory.define :state do
  f.name "NY"
end

私のスペックでは

before(:each) do 
  @static_model = Factory(:state) # with validate uniqueness of state name
end

エラー:

エントリー名「NY」などの重複


質問: rspec は各仕様の例の前にデータベースをクリアして、重複エントリ エラーをスローしないようにすべきではありませんか?

4

7 に答える 7

41

私が考えるもの:

  • テストスイートを実行するために使用rake specしますか: データベースを最初から構築します (何も固執していないことを確認するため)
  • をどこでも使用しますbefore (:all)か? で作成したものbefore :allは、 で再度削除するafter :allか、存在し続ける必要があるためです。
于 2010-07-26T14:38:45.727 に答える
2

ステートメントを次のようにラップしていないことが原因である場合もあります。

describe "what it should do" do
  @static_model = Factory(:state) # with validate uniqueness of state name
end

それがこの問題を解決する変更であることがわかりました: factory_girl がトランザクション的に動作しないのはなぜですか? - テスト後に行がデータベースに残る

于 2010-08-17T03:57:38.110 に答える
2

その他の考えられる原因:

  • states.yml フィクスチャがまだ残っています
  • 誰かがスクリプト/コンソール テストをいじって、後でクリーンアップするのを忘れていました。
于 2010-08-01T15:19:10.733 に答える
1

FG と RSpec を使用するときにどのような開始状態が期待できるかについて、同様の質問がありました。

私も明確になるのを待っていますが、データベースクリーナーは良い修正になるかもしれません: http://rubydoc.info/gems/database_cleaner/0.6.7/frames hth - ペリー

于 2011-04-29T17:06:08.730 に答える
0

Factory.create(:state) へのショートカットである Factory(:state) を使用すると、 factory_girl は保存されたオブジェクトを返します。

代わりに Factory.build(:state) を使用してください。

于 2011-10-03T02:05:32.870 に答える
0

通常の単体テストの yaml フィクスチャが rspec に混在している可能性がありますか?

于 2011-10-27T01:50:34.477 に答える