Webmock / RSpe c - Net :: HTTP - Как подтвердить, что read_timeout и open_timeout были установлены для экземпляра Net :: HTTP в методе - PullRequest
0 голосов
/ 12 июля 2020

Я новый пользователь rspe c и webmock!

Я устанавливаю значения тайм-аута чтения и открытия для экземпляра Net :: HTTP в методе, который я тестирую модулем:

https = Net::HTTP.new(uri.host, uri.port)
https.open_timeout = timeout #set the timeout from method parameters
https.read_timeout = timeout

# make request etc.

Я использую webmock для имитации запроса к внешнему API.

Как мне проверить, что установлены свойства open_timeout и read_timeout на экземпляре Net :: HTTP?

Я пробовал следующее в своем модульном тесте:

it "accepts custom timeout period" do
    yamlContent = "image: ruby:latest"
    expectedTimeout = 5
    allow(YAML).to receive(:load_file).with(@fileName).and_return(yamlContent)

    mockHttps = instance_double(Net::HTTP)
    stub_request(:post, @endpointUrl).to_timeout
    
    expect do
        api = Gitlab::Lint::Client::Api.new
        response = api.lint(@endpointUrl, @fileName, @defaultHeaders, expectedTimeout)    
    end.to raise_error(Net::OpenTimeout)

    expect(mockHttps.read_timeout).to eq(expectedTimeout)
    expect(mockHttps.open_timeout).to eq(expectedTimeout)
end

Это использует webmock для имитации тайм-аута, и я вижу, что ошибка тайм-аута действительно растут. Однако I read_timeout является нераспознанным свойством для mockHttps double:

   Failure/Error: expect(mockHttps.read_timeout).to eq(expectedTimeout)
       #<InstanceDouble(Net::HTTP) (anonymous)> received unexpected message :read_timeout with (no args)
     # ./spec/gitlab/lint/client/api_spec.rb:83:in `block (4 levels) in <top (required)>'
...