Ruby on rails RSpec测试期间转储数据库
我在写一篇文章,是为了抓住不可靠的测试。其想法是转储数据库以定位随机工厂。我正在.after钩子中使用系统调用:Ruby on rails RSpec测试期间转储数据库,ruby-on-rails,rspec,Ruby On Rails,Rspec,我在写一篇文章,是为了抓住不可靠的测试。其想法是转储数据库以定位随机工厂。我正在.after钩子中使用系统调用: config.after do |example| system "pg_dump -U postgres -d #{db_name} > #{path}/#{status}.sql" end 此时数据库包含一条记录——我已经用byebug确定了这一点。 然而,我遇到了一个问题——正如我所看到的,事务并没有关闭,所以如果我尝试通过psql获取记录——
config.after do |example|
system "pg_dump -U postgres -d #{db_name} > #{path}/#{status}.sql"
end
此时数据库包含一条记录——我已经用byebug确定了这一点。
然而,我遇到了一个问题——正如我所看到的,事务并没有关闭,所以如果我尝试通过psql获取记录——我什么也得不到,记录不存在。
在spec期间如何关闭事务?或者我在某个地方大错特错了?是的,问题是交易没有结束。数据库清理器在begin rollback中包装所有rspec执行。我找到了两种解决问题的方法:
这就是解决方案。请注意,对Databasecleaner的要求会使您的gem不那么受欢迎,对截断策略的要求也会降低。通过ActudieCordRD遍历所有现有表可能是更可持续的方法:/在RealssAdMug GEM中查看一下它是如何计算出所有现有的模型,这是一个合理的建议,我会考虑的,谢谢。
config.before(:each, flaky: true) do
DatabaseCleaner.strategy = :truncation
end