2012-06-06 38 views
1

我有一个Rails 3应用程序,我正在试图编写一个测试用例?当测试用例加载时,我可以看到它正在创建与数据库中的灯具对应的对象。但是,如果我更改测试用例中的对象或创建另一个对象,则它们不会反映在数据库中。此外,如果我找到正确发生的新创建的对象。在Rails中测试数据库中未反映的对象的更改?

这里发生了什么?另外,我怎样才能获得更改以反映在数据库中?

+0

你可以分享你的测试用例吗? – moritz

+0

测试用例是非常简单的:在这里面我做 blog.url =“http://newval.com” blog.save 调试 #我看在数据库和新的价值并不能反映 – akshat

+0

虽然在调试器,blog.errors.full_messages给你什么?你如何检查数据库中的值? – moritz

回答

3

在您的test_helper.rb中,use_transactional_fixtures选项可能设置为true。这意味着每个测试都包装在数据库事务中。一个事务(在MySQL InnoDB中)必须用“COMMIT”来持久化。 rails测试框架只是没有这样做,所以你的数据库在每次测试后都处于新的状态。因此,您的更改会回滚。

事务内的更改只能通过启动它的数据库连接从外部(在您的案例中为rails db命令)看到它们不会显示。

我希望这会有所帮助。

+0

谢谢。太棒了。 – akshat

+0

在java中添加相同的问题,我使用spring框架,当我禁用事务时,更改反映在数据库上。 – Ayodeji

相关问题