1

由于我使用的是遗留数据库,我被使用 MyISAM 的 MySQL 卡住了,这意味着我的表不支持事务。这导致测试失败,因为测试生成的表数据(我使用 factory_girl 作为固定装置)不会针对每种情况进行还原。

我发现config.use_transactional_fixturesRspec 在 spec_helper.rb 中公开了配置设置。

默认情况下设置为true。当我将其设置为 false 时,我看不到对我的测试有任何影响;由于重复记录,它们仍然失败。

该设置不应该自动展开对数据库所做的任何更改吗?还是我应该手动执行?

4

1 回答 1

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 
于 2011-01-05T07:52:40.357 回答