2011-01-05 12 views
0

私が使用しているレガシーデータベースのため、MyISAMを使用しているMySQLに悩まされています。これは、テストによって失敗しました。なぜなら、テストによって生成されたテーブルデータ(私はフィクスチャのfactory_girlを使用しています)は、それぞれのシナリオで元に戻されないからです。Rspecでトランザクションフィクスチャを無効にしても意味がありません

Rspecがspec_helper.rbのconfig.use_transactional_fixtures設定を公開していることがわかりました。

デフォルトではtrueに設定されています。私がそれをfalseに設定すると、私のテストには何の影響も見られません。重複したレコードのためにそれらはまだ失敗します。

DBに加えられた変更を自動的にアンロールする設定ではありませんか?あるいは私は手動でそれをすると思いますか?

答えて

1

あなたは正しいです - あなたのデータベースがトランザクションをサポートしていない場合、あなたは、いくつかのSQLは、各ステートメントの前にデータを一掃するためにコマンドを発行する必要があります:あなたのテーブルのそれぞれについて、

TRUNCATE TABLE tablename; 

一つ。あなたのhelper.rbで

これを試してみてください。

Spec::Runner.configure do |config| 
    config.before(:each) do 
    tables = %{users posts tags} 
    tables.each do |t| 
     ActiveRecord::Base.connection.execute('TRUNCATE TABLE #{t}') 
    end 
    end 
    ... 
end 
+0

クール、感謝を。私はRailsが何とかこれを自動化するという印象を受けていました。 –

関連する問題