运行规范时,对象不会出现在测试数据库中

时间:2010-10-04 03:13:21

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

通过在测试环境(Entity.create(:name => "Entity1"))中从Rails控制台调用RAILS_ENV=test rails console来保存对象时,在使用mysql客户端检查时,“Entity1”对象正确地出现在测试数据库(MySQL)中。 但是当在rspec文件(entity.create(:name => "Entity1"); sleep 100)中执行相同的操作并在睡眠功能期间检查测试数据库时,它似乎是完全空的。 为什么?保存的记录在哪里? (我当时在数据库中需要它,导致一些Sphinx测试。)

我只想补充一点,在规范中查询创建的Entity工作正常(即使它没有出现在数据库客户端中)。所以似乎Rails在这里做了一些我不太懂的奇迹。

更奇怪(至少对我而言;-))...在创建对象后执行Entity.connection.commit_db_transaction()时,记录突然出现在数据库中(但不会再自动清除)。< / p>

1 个答案:

答案 0 :(得分:1)

该问题的解决方案是Rails(或RSpec ......不确定)的一个名为Transactional Fixtures的功能。在spec_helper.rb中将其关闭时 config.use_transactional_fixtures = false创建对象后,所有记录都会突然出现在数据库中(但这可能会导致测试性能降低)。