2011-12-18 13 views
0

私が使用して私の国のテーブルに新しいエントリを作成し、その一部を私の(のみ/最初の)キュウリのテストを実行するとき、私は、奇妙な問題を抱えている:Cucumber、Capybara&Rails 2.3.2 - FactoryGirlはデータベースにレコードをコミットしませんが、コンソールからは動作しますか?

Factory.create(:country) 

モデルは私のデータベースにコミットされません。 (MySql 5)&ビューがこのデータを読み込もうとすると、テストが失敗します。 (:国)ここで私は、レールコンソールをロードし、まったく同じコマンドすなわちFactory.createを実行

[4;36;1mSQL (0.1ms)[0m [0;1mSAVEPOINT active_record_1[0m 
    [4;35;1mCountry Create (0.1ms)[0m [0mINSERT INTO `countries` (`name`, `country_code`, `currency_code`) VALUES('Ireland', 'IE', 'EUR')[0m 
    [4;36;1mSQL (0.1ms)[0m [0;1mRELEASE SAVEPOINT active_record_1[0m 
    [4;35;1mSQL (0.1ms)[0m [0mSAVEPOINT active_record_1[0m 

しかし私test.logからの抜粋である、レコードがデータベースにコミット取得します。ここでenv.rb任意のアドバイスは非常に高く評価されて

Cucumber::Rails::World.use_transactional_fixtures = false 

からtest.log

[4;36;1mSQL (3.5ms)[0m [0;1mBEGIN[0m 
    [4;35;1mCountry Create (0.2ms)[0m [0mINSERT INTO `countries` (`name`, `country_code`, `currency_code`) VALUES('Ireland', 'IE', 'EUR')[0m 
    [4;36;1mSQL (1.1ms)[0m [0;1mCOMMIT[0m 

から出力され、私はこれを理解しようとしている最後の2日間を過ごしたが、何の成功がなかったしました。

答えて

0

test.logファイルから投稿した行の2行目に、レコードが挿入されていることが示されています。私はあなたが取引の備品を無効にしたことを知っています。これは問題ありません。

偶然、database_cleanerの宝石を使用していますか?もしそうなら、それは基本的に、テストが完了した後にデータベースを元の状態に戻すことになります。これは、実行中のテストを一時停止し、データが挿入された後でなければ、テストスイートが実行された後に削除されるため、DB内には表示されません。

これは問題の根本原因であることはわかりませんが、コンソールからそのコマンドを1つだけ実行すると、DBに表示されますあなたはあなたのテストを実行した後ではありません。テストスイートが実行された後にテストデータがとなると、が削除されるため、テストには実行ごとに新しく一貫した開始点が設定されます。テストが毎回同じ環境で実行されることを確認する重要な部分です。したがって、信頼できる結果を得るために数えることができます。

+0

database_cleanerを追加し、DatabaseCleaner.strategy = nilを設定すると、レコードが保存を開始しました。しかし、私のtest.logファイルからは、テストの開始時にレコードが作成されている間に、次にテストケースを実行するまでは、アプリケーション/ビューでは使用できなくなることがわかります。データが挿入され、テストが失敗した(データがない)テストケースを実行し、次にデータとパスを見つけます。何か案は?ありがとう! – Jason

関連する問題