我在规范中有以下内容:
before do
@item = Item.new( title: "Lorem ipsum",
image: File.new(Rails.root.join('app', 'assets', 'images', 'rails.png')))
end
关联的规范需要大约30秒才能运行,但是当我从哈希中删除image: File.new()
时,我的测试运行时间不到1秒!
所以File.new()
正在为我的规格添加一个加载,如果可能的话我想将其存根,但是当我尝试这个时:
image: File.stub(Rails.root.join('app', 'assets', 'images', 'rails.png')))
我在测试输出中看到以下错误:
Failure/Error: image: File.stub(Rails.root.join('app', 'assets', 'images', 'rails.png'))) }
NoMethodError:
undefined method `to_sym' for #<Pathname:0xae767d8>
我很感激这里有任何建议。 FWIW,图像上传由回形针处理。
答案 0 :(得分:4)
我会做这样的事情:
@item = Item.new( title: "Lorem ipsum")
file = double('file', :size => 0.5.megabytes, :content_type => 'png', :original_filename => 'rails')
@item.stub(image).and_return(file)
答案 1 :(得分:4)
在Rails API中查看fixture_file_upload:
http://apidock.com/rails/ActionDispatch/TestProcess/fixture_file_upload
答案 2 :(得分:1)
还可以像这样存根附件: 将其添加到spec / support
module PaperclipStub
def stub_paperclip_attachment(model, attachment)
model.any_instance.stub(attachment.to_sym).and_return File.join(Rails.root, 'spec', 'fixtures', 'file.png')
model.any_instance.stub("#{attachment}_file_name".to_sym).and_return File.join(Rails.root, 'spec', 'fixtures', 'file.png')
end
end
在spec_helper.rb
中config.include PaperclipStub # Include custom paperclip_attachment stub
并在规格中使用它:
it "should be valid" do
stub_paperclip_attachment(Image, :image)
Image.new.should be_valid
end
答案 3 :(得分:1)
对不起,这不是嘲笑文件。你想制作一个对象并将一个真实的文件附加到它 - 这不是模拟,这些解决方案都不会模拟文件对象。
您绝对应该使用gem来制作测试数据,例如factory girl rails或fabrication。
..当你做汤姆时,答案是最好的答案:使用fixture_file_upload