У меня есть этот метод:Как насмехаться с RSpec API, который принимает и затем вызывает обратные вызовы блоков?
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 и запись скачанного файла в кусках.
Мне интересно, как выполнить тестирование, издеваясь над фактическим запросом. Поскольку он использует chunking через некоторые блоки, это немного сложно.
Я ранее имел этот код:
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
Так мне интересно, как модульного тестирования такие же вещи ... т. е. что путь создан, файл сохраняется и т. д., в то время как насмешливый Тифой. Поскольку это сторонняя библиотека, мне не нужно проверять, что она работает, просто она называется правильно.
Это CHUNKING и on_body
и on_complete
что путает меня (в плане того, как проверить его)
Спасибо, Дейв! Да, для меня это было не столько тестирование кода, а скорее понимание того, как тестировать Typhoeus API для chunking. Ваш пример выглядит идеально. Благодаря! –