由于我使用的是传统的数据库,我坚持与MySQL的MyISAM使用,这意味着我的表不支持事务。这导致测试失败,因为生成的表数据(我使用夹具factory_girl)由测试均不会恢复为每个场景。

我发现Rspec的暴露在spec_helper.rb的config.use_transactional_fixtures配置设置。

这是默认设置为true。当我将它设置为false,我看不到我的测试任何影响;他们仍然会由于重复的记录。

是不是该设置应该自动披到数据库所做的任何更改?或者,我应该这样做手工?

有帮助吗?

解决方案

你是正确的 - 如果你的数据库不支持事务处理,必须发出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 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top