2011-01-05 62 views
0

由於我使用的遺留數據庫,我使用MyISAM卡住MySQL,這意味着我的表不支持事務。這會導致測試失敗,因爲通過測試生成的表數據(我正在使用factory_girl作爲燈具)未針對每種情況進行恢復。禁用Rspec中的交易裝置不起作用

我發現Rspec暴露了spec_helper.rb中的config.use_transactional_fixtures配置設置。

默認設置爲true。當我將它設置爲false時,我沒有看到對測試有任何影響;他們仍然因重複記錄而失敗。

是不是該設置應該自動展開對數據庫所做的任何更改?或者我應該手動做到這一點?

回答

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以某種方式自動化了這一點。 – 2011-01-06 04:46:51