2

カスタム応答でラムダを使用してみました:

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

これは動的応答を処理する正しい方法ではないかもしれませんが、とにかく、webmock はラムダを 1 回だけ実行するようです。リクエストは毎回同じなので、次のいずれかです。

  1. ラムダを使用すると、応答ごとに動的コンテンツを生成できるという私の仮定は間違っていました。
  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 に答える