2012-05-12 29 views
0

私はoriginal_filenameを使っている間、ファイルのダウンロードのためのテストを書いています。私はfixture_file_uploadを使ってファイルアップロードを模擬することができました。しかし、元のファイル名の呼び出しをスタブ/モックする方法。Test :: Unitを使ってRailsで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> 

私は、このテストが失敗した理由を知っているが、それを修正する方法?

答えて

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 
ある
0

stubbingを行うためにmochaを使用しているか、rspec-railsを使用する方が良いと思います(私の意見では)。彼らは素晴らしいmocking/stubbing機能を持っており、より良いテストを行い、より洗練された構文を使い、テストファイル構造をより多く組織することができます。

これらの宝石には、通話をモック/スタブアウトする方法についてのドキュメントが用意されています。

関連する問題