Ruby on rails 在Rspec中禁用事务性装置没有效果
由于我使用的是一个遗留数据库,我一直使用MyISAM的MySQL,这意味着我的表不支持事务。这会导致测试失败,因为测试生成的表数据(我使用factory_girl作为fixture)不会针对每个场景还原 我发现Rspec公开了spec\u helper.rb中的Ruby on rails 在Rspec中禁用事务性装置没有效果,ruby-on-rails,rspec,fixtures,rspec2,Ruby On Rails,Rspec,Fixtures,Rspec2,由于我使用的是一个遗留数据库,我一直使用MyISAM的MySQL,这意味着我的表不支持事务。这会导致测试失败,因为测试生成的表数据(我使用factory_girl作为fixture)不会针对每个场景还原 我发现Rspec公开了spec\u helper.rb中的config.use\u transactional\u fixtureconfig设置 默认情况下设置为true。当我将其设置为false时,我看不到对我的测试有任何影响;由于重复记录,它们仍然失败 该设置不应该自动展开对数据库所做的任
config.use\u transactional\u fixture
config设置
默认情况下设置为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
您是正确的-如果您的数据库不支持事务,则必须在每条语句之前发出多个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
酷,谢谢;我的印象是Rails以某种方式实现了自动化;我的印象是Rails以某种方式自动化了这一点。