1

我正在尝试将 SEOMOZ API 与 VCR 集成。

由于对 SEOMOZ 的 API 请求包含随时间变化的相同请求的参数,我需要实现一个自定义匹配器。

这是我的 API 调用的样子:

http://lsapi.seomoz.com/linkscape/url-metrics/#{self.url}?Cols=#{cols}&AccessID=#{moz_id}&Expires=#{expires}&Signature=#{url_safe_signature} 

我还调用其他端点,例如 Twitter、Facebook 等。默认匹配器可以很好地完成工作。

如何仅针对 SEOMOZ 覆盖匹配器行为。在这种情况下,我应该在哪些参数上最好地匹配请求。

4

2 回答 2

1

您需要匹配除 Signature 和 Expires 之外的所有参数。

您可能会考虑的另一个选项(我们在将 VCR 与此类 API 一起使用时在内部使用它)是将测试时间记录在带有磁带的文件中,并使用 Timecop 或等效的东西来确保您重新运行录制的每次运行时都在“同一时间”进行测试。

于 2013-05-09T17:10:29.200 回答
0

您可以使用VCR.request_matchers.uri_without_params自定义匹配器,请参阅https://relishapp.com/vcr/vcr/v/2-5-0/docs/request-matching/uri-without-param-s

在您的情况下,您会像这样使用它:

VCR.configure do |c|
  # ...
  c.default_cassette_options = {
    # ...

    # the default is: match_requests_on: [:method :uri]
    match_requests_on: [:method, VCR.request_matchers.uri_without_params(:Signature, :Expires)]
  }
end
于 2013-07-25T14:50:07.920 回答