在测试环境中通过 Rails 控制台调用 Entity.create(:name => "Entity1")
保存对象时 (RAILS_ENV=test rails console
)使用 mysql 客户端检查时,“Entity1”对象正确出现在测试数据库 (MySQL) 中。
但是当在 rspec 文件 (entity.create(:name => "Entity1"); sleep 100
) 中做同样的事情并在 sleep 函数期间检查测试数据库时,它似乎完全是空的.
为什么?保存的记录在哪里? (当时我需要它在数据库中,因为一些 Sphinx 测试。)
我只想补充一点,在规范中查询创建的实体工作正常(即使它没有出现在数据库客户端中)。所以看起来 Rails 在这里做了一些我不太理解的奇迹。
更奇怪(至少对我来说 ;-))...当创建对象后执行 Entity.connection.commit_db_transaction()
时,记录突然出现在数据库中(但是不再自动清理)。
最佳答案
该问题的解决方案是名为 Transactional Fixtures
的 Rails(或 RSpec ... 不确定)的功能。在 spec_helper.rb 中关闭它时
config.use_transactional_fixtures = false
创建对象后,所有记录突然出现在数据库中(但这可能会导致较低的测试性能)。
关于ruby-on-rails - 运行规范时对象不会出现在测试数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3852629/