Simule OpenURI.open_uri do idioma com Minitest
Eu tenho um código que chamaOpenURI.open_uri
e quero confirmar que o URI está sendo usado na chamada (para que um esboço não funcione para mim), mas também interceptar a chamada. Espero não ter que abstrair a chamada paraOpenURI.open_uri
apenas para fins de teste. O que eu criei parece detalhado e excessivamente complicado.
under_test.rb
require 'open-uri'
class UnderTest
def get_request(uri)
open(uri).read
end
end
test_under_test.rb
require 'minitest/autorun'
require './lib/under_test'
class TestUnderTest < Mintest::Test
def test_get_request
@under_test = UnderTest.new
mock_json = '{"json":[{"element":"value"}]}'
uri = URI('https://www.example.com/api/v1.0?attr=value&format=json')
tempfile = Tempfile.new('tempfile')
tempfile.write(mock_json)
mock_open_uri = Minitest::Mock.new
mock_open_uri.expect(:call, tempfile, [uri])
OpenURI.stub :open_uri, mock_open_uri do
@under_test.get_request('https://www.example.com/api/v1.0?attr=value&format=json'
end
mock_open_uri.verify
end
end
Estou usando ou interpretando mal a zombaria do Minitest?
Parte da dança é que também estou criando umTempfile
para que meuread
chamada bem-sucedida. Eu poderia acabar com isso, mas espero que exista uma maneira de sair da cadeia de chamadas mais perto do começo.