如何从Carrierwave中的远程URL下载

时间:2017-03-30 11:42:28

标签: ruby-on-rails rspec mocking carrierwave

我有一个User AR模型,当我保存User个实例,其填充值为remote_avatar_url时,Carrierwave会自动下载该头像。有关此功能的更多信息here

现在,在我的测试中,我想要存根这种行为。我知道我能做到:

allow_any_instance_of(UserAvatarUploader).to receive(:download!)

然而,rspec-mocks文档discourages the use of allow/expect_any_instance_of

在测试中将Carrierwave的这一特定功能存在的正确方法是什么?

P.S。我已经在测试中禁用了图像处理:

config.enable_processing = false if Rails.env.test?

1 个答案:

答案 0 :(得分:4)

对我来说,答案是使用webmock宝石。它在测试期间阻止出站HTTP连接,并允许您轻松存根响应。

根据说明设置gem后,我将其添加到我的测试中:

body_file = File.open(File.expand_path('./spec/fixtures/attachments/sample.jpg'))
stub_request(:get, 'www.thedomainofmyimage.example.net').
  to_return(body: body_file, status: 200)

使用CarrierWave的remote_<uploader>_url功能,就像魅力一样。