对于测试期间的 API 调用,我想存根 OpenURI-open-method 以返回一个文件,该文件的内容我打包在一个常量中。但是,在同一个解析方法中,所有其他对 OpenURI open 的调用都应该正常处理
@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 中返回本地图像文件。
我会很高兴任何建议和提示:)