我有一些使用大型测试数据库的测试。我还在每次测试后使用Database Cleaner清理数据库。这就是问题所在。 在我的规范助手中,我有这个
config.around(:each) do |example|
MongoLib.new(database: "#{Rails.env}_sensor_data").drop_tables!
DatabaseCleaner.cleaning do
example.run
end
end
但是,这就是问题所在。上面提到的一组测试(一个大组),一遍又一遍地生成和丢弃这个大数据库(每次测试一次)。这需要很长时间,而且这些测试根本不会改变数据库,所以我不想每次都清理和创建数据库。
那么,有没有办法做这样的事情:
it 'something', argument do
#testing
end
所以在spec帮助器中我可以这样做:
config.around(:each) do |example|
MongoLib.new(database: "#{Rails.env}_sensor_data").drop_tables!
if example.argument?
DatabaseCleaner.cleaning do
example.run
end
end
end
或许这个问题还有其他解决办法吗?有什么想法吗?
答案 0 :(得分:2)
你有正确的想法。你的around钩子中的每个example
对象都有metadata
方法返回一个哈希值。因此,您可以标记要运行清理程序的测试,并在钩子中查找该标记。像这样:
it "does something", :db_clean do
# ...
end
config.around(:each) do |example|
if example.metadata[:db_clean]
# ...
else
# ...
end
end
您可以详细了解这些过滤器here。