我有一个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?
答案 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
功能,就像魅力一样。