由于我正在使用的遗留数据库,我使用MyISAM陷入MySQL,这意味着我的表不支持事务。这导致测试失败,因为测试中生成的表数据(我正在使用factory_girl作为灯具)不会针对每种情况进行还原。
我发现Rspec公开了spec_helper.rb中的config.use_transactional_fixtures
配置设置。
默认设置为true。当我把它设置为假时,我认为我的测试没有任何影响;由于重复记录,它们仍然失败。
该设置是否应该自动展开对数据库所做的任何更改?或者我应该手动做到这一点?
答案 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