2011-01-11 8 views
0

セットアップデータを含む工場があります。例:Railsユニットテストを実行しているときに、工場のシードにアクセスできない

Factory.define :event do |event| 
    event.name { Factory.next(:email) } 
    event.blurb "Test event blurb" 
    event.association(:owner, :factory => :user) 
    event.countries Country.all 
end 

Country.allはルックアップテーブルのすべての国をその特定のイベントに割り当てます。私は私のテストヘルパーにこのラインで私のテストを実行する前に、私は種をロードすることで、すべての国が含まれています

require "#{Rails.root}/db/seeds.rb" 

個々のユニットテストを実行するときにこれは素晴らしい作品:

ruby test/unit/event_test.rb 

Country.allは何も返しませんがテストを実行すると、次のようになります。

rake test:units 

これはなぜ起こっているのですか?

答えて

1

test_helperにシードが必要です。一度ロードされます。各テスト実行後、シードされたデータを含むデータベースが消去されます。シードを毎回ロードするには、このようなものをtest_helperのActiveSupport::TestCaseクラス定義に追加します。

class ActiveSupport::TestCase 
    # this line: 
    setup { load "#{Rails.root}/db/seeds" } 
end 
+0

に入れることが必要な工場内のデータにアクセスするように私にも注意してくださいデータベースにアクセスする属性をブロックに配置する必要があることを示しています。 event.countries Country.allは、event.countries {Country.all}になります。 – Tony

0

rake gemのソースコードをご覧ください。 seeds.rbファイルを手動で各テストファイルに読み込むか、より良い方法でtest_helper.rbから読み込む必要があるようです。

+0

私はすでに私のtest_helper.rbからそれをやっていたが、hakuninは、指摘各ファイルで行わなければならなかったとも属性がブロック – Tony

関連する問題