我正在编写一些rspec规范,其中对象的widgetpic字段需要指向实际图像,但不使用carrierwave上传器.
在测试中,我只想绕过上传器并手动设置测试图片的网址.具体来说,我在网上有一些测试图像,只是想要foo.widgetpic.url返回一些固定位置:" http://mybucket.s3.amazonaws.com/test_pix/test1.png "
Widget模型具有:
mount_uploader :widgetpic, WidgetPicUploader
Run Code Online (Sandbox Code Playgroud)
所以在我的FactoryGirl工厂,我认为我需要做这样的事情
trait :test_pic do
SOMETHING "http://mybucket.s3.amazonaws.com/test_pix/test1.png"
end
Run Code Online (Sandbox Code Playgroud)
我尝试设置widgetpic_url和remote_widgetpic_url,但这不起作用(widgetpic.url仍然返回我的上传器中定义的默认'无图像'图像).
看来是你的上传器出了问题,而不是工厂出了问题。你能发布你的载波配置吗?
除此之外,远程图像的正确工厂语法是remote_<resource>_url:
trait :test_pic do
remote_widgetpic_url "http://mybucket.s3.amazonaws.com/test_pix/test1.png"
end
Run Code Online (Sandbox Code Playgroud)
但请注意,这样做不会绕过 CarrierWave。CarrierWave 将为您获取远程图像,并使用下载的图像重新上传到上传器中指定的位置。您可以将此技术与WebMock或VCR等技术结合使用来模拟和/或记录 HTTP 请求并进行回放。
一种更简单的方法可能是使用Fog内置的模拟功能来模拟测试的上传。这样,您就可以在工厂中放置一个虚拟图像:
factory :widget do
# ...
widgetpic Rack::Test::UploadedFile.new(File.open(
File.join(
File.dirname(__FILE__), '../fixtures/images/your_image_here.png')))
end
Run Code Online (Sandbox Code Playgroud)
该图像将用于模拟上传,但不会发布到 S3 上的位置,您可以从端到端测试上传。
| 归档时间: |
|
| 查看次数: |
957 次 |
| 最近记录: |