我有一个Rails 3应用程序,我正在尝试编写一个测试用例?加载测试用例时,我可以看到它正在创建与数据库中的fixture相对应的对象。但是,如果我更改测试用例中的对象或创建另一个对象,则它们不会反映在数据库中。此外,如果我找到正确发生的新创建的对象。
这里发生了什么?另外,如何让更改反映在数据库中?
答案 0 :(得分:3)
在test_helper.rb中,use_transaction_fixtures选项可能设置为true
。这意味着每个测试都包含在数据库事务中。事务(在MySQL InnoDB中)必须使用“COMMIT”持久化。 rails测试框架不会这样做,因此您的数据库在每次测试后都处于新鲜状态。因此,您的更改将被回滚。
事务中的更改只能通过启动它的数据库连接来看到,从外部(在您的情况下是rails db
命令)它们将不会显示。
我希望,这有帮助。