我正在使用 rails 提供的内置单元测试功能测试应用程序。问题是一项测试严重依赖于 id 的计算,我们必须对其进行测试。由于在回滚事务时活动记录不会重置 auto_increment,我们在这里遇到了一些麻烦。
如果有办法重置所有数据库表并再次加载固定装置,就好像我只运行了那个测试一样,事情可能会得到解决。
首先,我尝试定义一个设置方法来以这种方式重置所有必要的 auto_increment 值:
def setup
ActiveRecord::Base.connection.execute("ALTER TABLE 'table_name1' AUTO_INCREMENT = 1;")
ActiveRecord::Base.connection.execute("ALTER TABLE 'table_name2' AUTO_INCREMENT = 1;")
end
但是测试失败并抛出了这个丑陋的错误:
ActiveRecord::StatementInvalid: Mysql::Error: SAVEPOINT active_record_1 不存在: ROLLBACK TO SAVEPOINT active_record_1
然后我尝试在 setup 方法中调用 db:test:prepare 和 db:fixtures:load 但这也失败了。此外,由于 setup 方法在文件中的每个测试之前运行,它会大大降低测试速度,不是吗?
那么如何在特定的测试套件或测试文件(不知道如何调用它)之前运行那些 rake 任务,并且只针对那个?
谢谢!:)