1

我在规范中有以下内容:

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,图像上传由回形针处理。

4

4 回答 4

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)
于 2012-11-20T10:22:30.210 回答
3

看看 Rails API 中的 fixture_file_upload:

http://apidock.com/rails/ActionDispatch/TestProcess/fixture_file_upload

于 2012-11-20T13:44:36.240 回答
1

也可以像这样存根附件:将其添加到规范/支持中

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
于 2013-02-04T12:47:10.270 回答
1

对不起,但这不是在模拟文件。你想制造一个对象并将一个真实的文件附加到它上面——这不是一个模拟,这些解决方案都没有模拟一个文件对象。

您绝对应该使用宝石来制造测试数据,例如工厂女孩铁轨制造

..当你这样做时,Tom L 的答案是最好的:使用fixture_file_upload

于 2013-10-26T16:06:48.543 回答