Ruby on rails rspec/cucumber运行后在何处清理cloudinary文件上载
我在我的Ruby on rails rspec/cucumber运行后在何处清理cloudinary文件上载,ruby-on-rails,rspec,cucumber,cloudinary,Ruby On Rails,Rspec,Cucumber,Cloudinary,我在我的FactoryGirl方法中使用fixture\u file\u upload来测试文件上传。问题是,清理数据库后,所有上载的文件都保留在Cloudinary上 我一直在使用Cloudinary::Api.delete_资源使用rake任务来清除它们,但我宁愿在DatabaseCleaner删除所有相关的公共id之前立即清除它们 我应该在哪里干预DatabaseCleaner,以便从Cloudinary中删除这些文件?我在这里有两种方法 首先,我不会上传任何东西到cloudinary,除
FactoryGirl
方法中使用fixture\u file\u upload
来测试文件上传。问题是,清理数据库后,所有上载的文件都保留在Cloudinary
上
我一直在使用Cloudinary::Api.delete_资源
使用rake任务来清除它们,但我宁愿在DatabaseCleaner
删除所有相关的公共id之前立即清除它们
我应该在哪里干预
DatabaseCleaner
,以便从Cloudinary
中删除这些文件?我在这里有两种方法
首先,我不会上传任何东西到cloudinary,除非它是一个集成测试。我会使用mock、stub或test-double
第二,如果你真的因为任何原因需要上传文件,我会在你的hook测试之后编写一个hook,在
中自动清理
首先,我不会上传任何东西到cloudinary,除非它是一个集成测试。我会使用mock、stub或test-double
第二,如果你真的因为任何原因需要上传文件,我会在你所有的钩子测试之后编写一个钩子,在一个中进行自动清理。基于@phoet的输入,并且考虑到cloudinary限制了你一天可以进行的API调用的数量,除了一次调用可以清理的图像数量之外,我还创建了一个类
class CleanupCloudinary
@@public_ids = []
def self.add_public_ids
Attachinary::File.all.each do |image|
@@public_ids << image.public_id
clean if @@public_ids.count == 100
end
end
def self.clean
Cloudinary::Api.delete_resources(@@public_ids) if @@public_ids.count > 0
@@public_ids = []
end
end
在env.rb中,我添加了
at_exit do
CleanupCloudinary.clean
end
以及在spec_helper.rb中
config.after(:suite) do
CleanupCloudinary.clean
end
这导致在测试期间,在每100个cloudinary图像之后进行清理,并且在测试之后,根据@phoet的输入清理剩余的图像,并且考虑到cloudinary限制了您在一天内可以执行的API调用的数量,以及您可以在一次调用中清理的图像的数量,我创建了一个类
class CleanupCloudinary
@@public_ids = []
def self.add_public_ids
Attachinary::File.all.each do |image|
@@public_ids << image.public_id
clean if @@public_ids.count == 100
end
end
def self.clean
Cloudinary::Api.delete_resources(@@public_ids) if @@public_ids.count > 0
@@public_ids = []
end
end
在env.rb中,我添加了
at_exit do
CleanupCloudinary.clean
end
以及在spec_helper.rb中
config.after(:suite) do
CleanupCloudinary.clean
end
这将导致在测试期间,在每100个cloudinary映像之后进行清理,并在测试之后清理剩余的以使@Danny solution在Minitest中工作,而不是在退出时进行和配置。在
之后,添加test\u helper.rb
:
class ActiveSupport::TestCase
...
Minitest.after_运行do
“云清理”
干净的,干净的
结束
结束
如果需要更频繁地清理,可以在test\u helper.rb
或特定测试文件中全局使用teardown{CleanupCloudinary.clean}
当然,在工厂里,你仍然需要:
(:create)do之后的
CleanupCloudinary.add_public_id
结束
要使@Danny solution在Minitest中工作,请在后添加test\u helper.rb
,而不是退出时的和配置:
class ActiveSupport::TestCase
...
Minitest.after_运行do
“云清理”
干净的,干净的
结束
结束
如果需要更频繁地清理,可以在test\u helper.rb
或特定测试文件中全局使用teardown{CleanupCloudinary.clean}
当然,在工厂里,你仍然需要:
(:create)do之后的
CleanupCloudinary.add_public_id
结束
我将attachinary gem与cloudinary结合使用,但还没有找到在我的模型中保留“has_attachment”指令的方法。是否存在在所有测试运行之后运行的“after_all”(在所有测试运行之后运行)?只需对每个测试文件执行此操作,不会产生任何差异。这取决于:config.after(:each){your_hook}
是100%干燥的。您还可以使用标记来标记必须运行的spec。使用rspec有无数种方法可以做到这一点。我正在使用attachinary gem,与cloudinary结合使用,但还没有找到一种方法在我的模型中绕过“has_attachment”指令。是否存在在所有测试运行之后运行的“after_all”(在所有测试运行之后运行)?只需对每个测试文件执行此操作,不会产生任何差异。这取决于:config.after(:each){your_hook}
是100%干燥的。您还可以使用标记来标记必须运行的spec。使用rspec有无数种方法可以做到这一点。:build
选项在(:build,:create)do
之后的中无效,因为它显然不在数据库中写入。否则,要使其在Minitest中工作,请通过在test\u helper.rb
中添加teardown{CleanupCloudinary.clean}
来替换退出时的和config.after
。在(:build,:create)do
之后的中,:build
选项无效,因为它显然不会写入数据库。否则,要使其在Minitest中工作,请通过在test\u helper.rb
中添加teardown{CleanupCloudinary.clean}
来替换退出处的和config.after
。