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

次のように添付ファイルをスタブ化することもできます: Add it into 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
于 2013-02-04T12:47:10.270 に答える