2

我尝试在自定义响应中使用 lambda:

stub_request(
        :post,
        'http://blah.blah/token'
    ).to_return(
        status: 200,
        body: lambda { |a| '{"token":"' + SecureRandom.hex(20) + '","expires_in":"259200"}' }
    )

也许这不是处理动态响应的正确方法,但无论如何,webmock 似乎只执行一次 lambda。每次请求都是相同的,因此:

  1. 我认为使用 lambda 可以让我在每个响应的基础上生成动态内容的假设是错误的。
  2. 因为重复的请求是相同的,所以 webmock 只使用它生成的最后一个响应。
4

1 回答 1

0

由于写了这个问题,我强烈怀疑 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 进行测试。

于 2015-11-29T00:28:44.227 回答