1

Rails アプリケーションで Fixtures の代わりに FactoryGirl を使用しています。

テストで factory girl を使用してテスト データを作成しようとすると、次のように表示されます

PG:Error relation "users" doesn't exists(私は User という名前のモデルを持っています)

しかし、rake db:test:cloneを実行してからテストを実行すると、テストに合格します。このrake db:test:cloneコマンドは、すべてのテーブル構造を開発データベースからテスト データベースに複製し、これにより問題が修正されます。

rake db:test:cloneしかし、FactoryGirl を使用しているときに実行されないようにする方法はありますか?

または私は何が欠けていますか?

アップデート :

Rspec と FactoryGirl を使用する別のアプリケーションがあります。rake spec --traceそのアプリケーションでは、コマンドの実行時に以下が実行されます

** Invoke spec (first_time)
** Invoke db:test:clone_structure (first_time)
** Invoke db:structure:dump (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:structure:dump
** Invoke db:test:load_structure (first_time)
** Invoke db:test:purge (first_time)
** Invoke environment 
** Invoke db:load_config 
** Execute db:test:purge
** Execute db:test:load_structure
** Invoke db:structure:load (first_time)
** Invoke environment 
** Invoke db:load_config 
** Execute db:structure:load

しかし、新しいアプリケーションのいずれかで、実行時に以下が実行されていることがわかりますrake spec --trace

** Invoke spec (first_time)
** Invoke noop (first_time)
** Execute noop
** Execute spec

私が欠けているものを提案してください。

よろしく

バラン

4

2 に答える 2

1

を実行するたびに も実行してdb:migratedb:test:prepareデータベースの変更がテスト データベースにも反映されるようにします。

于 2013-01-08T13:14:45.100 に答える
0

解決策を見つけました。rake タスクcustomrake.rakeを下に作成し/lib/tasks 、行を追加する必要があります。これにより、 Specs を実行する前にtask :spec => 'db:test:prepare'確実に実行されます。rake db:test:prepare

于 2013-01-08T17:09:05.003 に答える