我一直在嘗試使用Minitest來測試我的代碼(full repo),但是在從.txt下載SHA1哈希的一種方法遇到問題文件在網站上並返回值。Minitest:如何在URL上殘留/模擬Kernel.open的文件結果
方法:
def download_remote_sha1
@log.info('Downloading Elasticsearch SHA1.')
@remote_sha1 = ''
Kernel.open(@verify_url) do |file|
@remote_sha1 = file.read
end
@remote_sha1 = @remote_sha1.split(/\s\s/)[0]
@remote_sha1
end
你可以看到,我記錄的內容發生在命令行,創建一個對象來保存我的SHA1值,打開網址(如https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.2.deb.sha1.txt)
我再拆該字符串,以便我只有SHA1值。
問題是,在測試過程中,我想對使用OpenURI打開URL的Kernel.open
進行存根。我想確保我沒有真正下載任何文件,但是我只是通過阻止我自己的模擬IO對象來測試它是否正確地分割了一些東西。
我試過它像下面的塊,但是當@remote_sha1 = file.read
發生時,文件項目是零。
@mock_file = Minitest::Mock.new
@mock_file.expect(:read, 'd377e39343e5cc277104beee349e1578dc50f7f8 elasticsearch-1.4.2.deb')
Kernel.stub :open, @mock_file do
@downloader = ElasticsearchUpdate::Downloader.new(hash, true)
@downloader.download_remote_sha1.must_equal 'd377e39343e5cc277104beee349e1578dc50f7f8'
end
嗨,你能請ACC埃普馬特的答案,而不是我的?在我想清楚發生了什麼之前,他發佈了正確的答案。謝謝。 – 7stud 2015-02-07 06:05:28