タイトルの通りです。
幾つかやり方はあるみたいですが、自分の環境下(WebMock+RSpecでテスト。Paperclip+S3でファイルアップロード)では
AWS.config(:access_key_id => "TESTKEY", :secret_access_key => "TESTSECRET", :stub_requests => true)
Image.any_instance.stub(:save_attached_files).and_return(true)
@image = fixture_file_upload('/files/test.gif', 'image/gif')
で可能になりました。
追記:この記述はコントローラー向けです。下にモデルでテストを書く時の記述をしています。
テスト用のファイルはspec/fixtures/files/
以下に置きます。
Image
は利用しているファイルを所有するモデルです。
後は@image
を適当な所で使えばおkです。
AWS
の設定部分が記述されていないと
WebMock::NetConnectNotAllowedError:
Real HTTP connections are disabled. Unregistered request: PUT https://...
となってしまいました。
追記
fixture_file_upload
はモデルのテストを行う時利用できませんでした。
ので
stub_request(:get, "http://example.com/image.gif").
with(:headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).
to_return(:status => 200, :body => File.read('spec/fixtures/image.gif'), :headers => {"Content-Type" => 'image/gif'})
とwebmock
の時点でファイルを読みこませればOKです。
その際@image = fixture_file_upload('/files/test.gif', 'image/gif')
の記述は不要です。