テスト中のAPI呼び出しに対して、OpenURI-open-methodをスタブ化して、コンテンツを定数にパックしたファイルを返したいと思います。ただし、同じ解析メソッドで、OpenURIopenへの他のすべての呼び出しは通常どおり処理する必要があります
@obj.should_receive(:open).with do |arg|
if arg == mypath # mypath is a string constant like "http://stackoverflow.com/questions"
obj=double("object_returned_by_openuri_open") # create a double
obj.stub(:read).and_return(TESTFILE) # with a stub
obj #return the double
else
open(arg) # call original Open URI method in all other cases
end
end
ただし、解析メソッドを呼び出すと、これは機能せず、解析メソッド"NoMethodError:
undefined method read for nil:NilClass"
の行f = open(mypath).read
に戻ります。
この種の「部分的なメソッドスタブ」(特定の引数に対してメソッドをスタブし、他の引数に対してはオリジナルを呼び出す)を実現する方法を知っている人はいますか。他のファイルは画像なので、ソースコードに定数として保存したくありません。else
テストをネットワークに依存しないようにする拡張機能として、 -caseでローカルイメージファイルを返すこともできます。
私はどんな提案やヒントについても喜んでいるでしょう:)