私はこの方法を持っています:
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をモックしています。これはサード パーティ製のライブラリなので、正しく呼び出されていることだけをテストする必要はありません。
それはチャンクでありon_body
、on_complete
それは私を混乱させています(テスト方法に関して)