11

画像のアップロードに Paperclip と S3 を使用しており、テスト スイートから S3 への呼び出しをスタブ化しようとしています。私はやっていることに言及している思考ボットの投稿を見つけました

  a.cover       { a.paperclip_fixture('album', 'cover', 'png') }

しかし、それは「引数の数が間違っています(2に対して4)」というエラーが表示されます。上記の引数を配列に切り替えてみました。これにより、元のエラーが削除されましたが、「属性は既に定義されています: paperclip_fixture」というエラーが表示されます。

誰もこれを機能させることができましたか? また、理想的には、開発環境にローカル ファイルシステムを使用したいと考えています。これを行う簡単な方法はありますか?

4

8 に答える 8

7

さて、私は基本的な問題を理解しました。これは(私が信じている)エリザが言ったように、私は使っていないのでshoulda(私はとを使っrspec 2.6.0ていfactory_girl 2.1.2ます)。

これが私のために働いたものです(Profile添付ファイルがあるクラスはどこにありますか):

  Profile.any_instance.stub(:save_attached_files).and_return(true)
  @profile = Factory(:profile)

現時点ではbefore、私の例の方法でこれを正しく行っていrspecます。おそらくそれを置くためのより良い場所があります。

于 2011-11-28T00:05:23.120 に答える
6

最新のペーパークリップ (github master ブランチから) と aws-sdk バージョン 2 を使用して、次の構成で問題を解決しました。

require "aws-sdk"
Aws.config[:s3] = {stub_responses: true}

詳細については、 Amazon SDKをご覧ください。

于 2016-01-26T08:01:06.147 に答える
5

これを「spec/rails_helper.rb」ファイルに配置するとうまくいきました:

require 'aws'
AWS.stub!
AWS.config(:access_key_id => "TESTKEY", :secret_access_key => "TESTSECRET")
于 2015-01-31T23:20:15.107 に答える
3

あなたはshouldaを使っていますか?使用していない場合は、使用している paperclip_fixture メソッドが別の場所から取得され、動作が異なる可能性があります。

関連する可能性があるもの: https://github.com/thoughtbot/paperclip/blob/master/shoulda_macros/paperclip.rb

于 2011-03-02T23:18:03.730 に答える
1

これが私がこれを機能させた方法です。まず、fakeweb gemが必要です。そうしないと、失敗します。spec/support/paperclip/[model]/[attachment_name][ext]また、パスに空のファイルが必要です。

私がしたことは、Paperclipからコードをコピーして、工場に貼り付けることでした。'paperclip_fixture'を機能させることができませんでした。

factory :attachment do
  file do |a|
    # Stubbed  Paperclip attachment from: https://github.com/thoughtbot/paperclip/blob/master/shoulda_macros/paperclip.rb#L68
    # FIX: This was the only way I made this work. Calling the paperclip_fixture directly didn't work.
    # See: http://stackoverflow.com/questions/4941586/stubbing-paperclip-s3-requests-in-specs
    model, attachment, extension = "customer_attachment", "file", "doc"      
    definition = model.gsub(" ", "_").classify.constantize.
                       attachment_definitions[attachment.to_sym]

    path = "http://s3.amazonaws.com/:id/#{definition[:path]}"
    path.gsub!(/:([^\/\.]+)/) do |match|
      "([^\/\.]+)"
    end

    begin
      FakeWeb.register_uri(:put, Regexp.new(path), :body => "OK")
    rescue NameError
      raise NameError, "the stub_paperclip_s3 shoulda macro requires the fakeweb gem."
    end
    base_path = File.join(Rails.root, "spec", "support", "paperclip")
    File.new(File.join(base_path, model, "#{attachment}.#{extension}"))
  end
end
于 2012-01-29T18:26:44.007 に答える
1

これは、shoulda ヘルパーを使用せずにペーパークリップからファイルをスタブする方法です。

before(:each) do 
  @sheet = double('sheet')
  @sheet.stub(:url).and_return(File.join(Rails.root, 'spec','fixtures','files', 'file.xls'))
  active_record_object.stub(:sheet).and_return(@sheet)
end

これが誰かに役立つことを願っています。

于 2013-02-20T06:18:09.027 に答える
1

Cucumber & Factory Girl を使用して S3 で Paperclip をテストした後、Rails 2.3 から Rails 3.0 へのアプリのアップグレードに出くわしました。

Paperclip::Shoulda モジュールを Factory クラスに含める代わりに、FactoryGirl::DefinitionProxy クラスに含める必要があったため、次のように変更しました。

class Factory
  include Paperclip::Shoulda
end

class FactoryGirl::DefinitionProxy
  include Paperclip::Shoulda
end

参考までに、私は paperclip 2.4.1 と factory_girl 2.0.5 を使用しています。

于 2014-03-12T23:23:49.520 に答える