在Rails中创建的记录不会持久测试数据库

时间:2012-03-30 14:27:35

标签: ruby-on-rails-3 unit-testing

我已经创建了一个测试用例来将数据保存到我的数据库中。灯具持续正确,但我在测试用例中创建的记录未显示在数据库中。我的测试如下所示:

test "new course" do
   course = Course.new
   course.name = 'test'
   assert course.save
end

测试通过,当我通过它调试并自己调用course.save时,我可以看到它有一个生成的ID。有什么想法吗?

1 个答案:

答案 0 :(得分:7)

如果您在测试后尝试检查数据是否在数据库中,则由于测试的运行方式,情况并非如此。

Rails的测试在数据库事务中运行(默认情况下为 1 ),因此它将继续在测试中创建数据并运行所有断言,但是一旦完成所有说明并完成它要回滚该事务使数据库处于原始状态。

这样做的原因是数据库始终是干净的,因此您没有记录可能会改变测试结果的记录。


1 虽然可以通过禁用设置(我忘记它在Test :: Unit中的内容)或使用database_cleaner等工具来更改。