Webmock кеширует ответы? Или: Как ответить на повторные запросы с рандомизированным контентом
Я попытался использовать лямбду в моем пользовательском ответе:
stub_request(
:post,
'http://blah.blah/token'
).to_return(
status: 200,
body: lambda { |a| '{"token":"' + SecureRandom.hex(20) + '","expires_in":"259200"}' }
)
Возможно, это неправильный способ обработки динамических ответов, но в любом случае webmock, кажется, выполняет лямбда-код ровно один раз. Запрос каждый раз идентичен, поэтому либо:
- Мое предположение, что использование лямбды позволит мне генерировать динамический контент для каждого ответа, было неверным.
- Поскольку повторяющиеся запросы идентичны, webmock просто использует последний сгенерированный ответ.
1 ответ
Так как этот вопрос был написан, я сильно подозреваю, что что-то в Webmock изменилось, потому что следующий тест проходит:
require 'webmock/rspec'
require 'securerandom'
require 'uri'
describe "something" do
it "happens" do
s = stub_request(:get, 'example.com/blah').
to_return(status: 200, body: lambda { |x| SecureRandom.hex(20) })
expect(Net::HTTP.get(URI('http://example.com/blah')))
.to_not eq(Net::HTTP.get(URI('http://example.com/blah')))
expect(s).to have_been_requested.at_least_once
end
end
Протестировано с Ruby 2.1.5p273, RSpec 3.3.1 и WebMock 1.21.0.