0

original_filenameを使用しているファイルダウンロードのテストを作成しています。を使用してファイルのアップロードをモックすることができましたfixture_file_upload。しかし、original_filename呼び出しをスタブ/モックする方法。

def import_for_photo(picture_url, user)
  remote_photo = open(picture_url)
  remote_photo.original_filename = "#{user.id}.jpg"
  user.update_attributes({:picture => remote_photo})
end

テスト

def test_import_for_photo
  fixture_file = fixture_file_upload(File.join('files', 'test.jpg'), 'image/jpeg')
  OpenURI.expects(:open_uri).returns(fixture_file)
  import_for_photo("http://dummy_url.com/dummy.jpg", users(:one))
  assert_equal "1.jpg", users(:one).reload.picture_file_name
end

テスト出力、

NoMethodError: undefined method `original_filename=' for #<File:/tmp/test.jpg20120512-4253-x673nc-0>

このテストが失敗する理由はわかっていますが、修正するにはどうすればよいですか?

4

2 に答える 2

0

スタブを行うためにモカを使用することを検討する必要があります。または、(私の意見では)rspec-railsの使用に切り替えることをお勧めします。それらは優れたモック/スタブ機能を備えており、より良いテストを行い、よりクリーンな構文を使用し、テストファイル構造をより整理することができます。

これらの各gemには、呼び出しをモック/スタブアウトする方法に関するドキュメントがすぐに利用できます。

于 2012-05-12T19:37:03.720 に答える
0

解決策を見つけました。スタブを試みる代わりに、スタブ:original_filenameを作成し:original_filename=('='に注意)、問題は解決しました。

これがコードです

def test_import_for_photo
  fixture_file = fixture_file_upload(File.join('files', 'test.jpg'), 'image/jpeg')
  fixture_file.expects(:original_filename=)
  OpenURI.expects(:open_uri).returns(fixture_file)
  import_for_photo("http://dummy_url.com/dummy.jpg", users(:one))
  assert_equal "1.jpg", users(:one).reload.picture_file_name
end
于 2012-05-12T19:53:10.260 に答える