我有这个方法:
def download_zip_file
FileUtils.rm_rf(@zip_path) if @zip_path
FileUtils.mkdir_p(@zip_path)
downloaded_file = File.open(@zip_file, "wb")
request = Typhoeus::Request.new(@feed, followlocation: true)
request.on_body { |chunk| downloaded_file.write(chunk) }
request.on_complete { |response| downloaded_file.close }
request.run
end
它清除 zip_path,重新创建它,打开一个文件进行写入,然后从@feed
URL 下载文件并以块的形式写入下载的文件。
我想知道如何对其进行单元测试,模拟实际的请求。由于它通过一些块使用分块,所以有点复杂。
我以前有这个代码:
def download_feed_data_from_url
response = Typhoeus.get(@feed, followlocation: true)
raise(FeedNotFoundError, "Could not find feed at feed: #{@feed}. Response: #{response.inspect}") unless response.success?
result = response.body
end
这很容易测试(通过模拟 Typhoeus 并提供存根返回):
context "testing feed downloading" do
let(:feed) { "http://the.feed.url" }
let(:response) { double(body: "some content", success?: true) }
before
allow(Typhoeus).to receive(:get).with(feed, followlocation:true).and_return(response)
end
# ... individual assertions, i.e. that Typhoeus is called, that it pulls the body content, etc.
end
所以我想知道如何对相同种类的东西进行单元测试......即在模拟 Typhoeus 时创建路径、保存文件等。由于它是一个 3rd 方库,我不需要测试它是否有效,只要它被正确调用即可。
这是分块,on_body
这on_complete
让我感到困惑(就如何测试而言)