在Rspec中禁用事务夹具无效

时间:2011-01-05 05:45:09

标签: ruby-on-rails rspec fixtures rspec2

由于我正在使用的遗留数据库,我使用MyISAM陷入MySQL,这意味着我的表不支持事务。这导致测试失败,因为测试中生成的表数据(我正在使用factory_girl作为灯具)不会针对每种情况进行还原。

我发现Rspec公开了spec_helper.rb中的config.use_transactional_fixtures配置设置。

默认设置为true。当我把它设置为假时,我认为我的测试没有任何影响;由于重复记录,它们仍然失败。

该设置是否应该自动展开对数据库所做的任何更改?或者我应该手动做到这一点?

1 个答案:

答案 0 :(得分: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