我正在将 Webmock 存根添加到我的测试中。
现在,我正在测试是否发出了请求,但我想在不将完整网址与其所有参数进行匹配的情况下进行测试。
expect(WebMock).to have_requested(:get, "us-street.api.smartystreets.com")
结果:
失败/错误:expect(WebMock).to have_requested(:get, "us-street.api.smartystreets.com")
The request GET http://us-street.api.smartystreets.com/ was expected to execute 1 time but it executed 0 times
The following requests were made:
GET https://us-street.api.smartystreets.com/street-address?addressee&auth-id=#{@auth_id}&auth-token=#{@auth_token}&candidates=3&city&input_id&lastline&license=us-core-cloud&match=invalid&secondary&state&street=10%20Nocklyn%20Drave&street2&urbanization&zipcode=15237 with headers {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Content-Type'=>'application/json', 'Host'=>'us-street.api.smartystreets.com', 'User-Agent'=>'smartystreets (sdk:[email protected])'} was made 1 time
所以它没有达到预期,因为我没有在第二个参数中使用整个 url。
我确信一定有某种通配符或其他东西可以让我测试是否发出了任何获取请求。我什至不关心是否检查了任何网址。
我尝试将第二个参数留空
expect(WebMock).to have_requested(:get)
但这会产生一个 ArgumentError。
提前致谢!
您可以使用 regex 来匹配该主机名
expect(WebMock).to have_requested(:get, /us-street.api.smartystreets.com/)
或者更多的路径(注意
%r
当涉及斜杠时语法会更好)
expect(WebMock).to have_requested(:get, %r{https://us-street.api.smartystreets.com/street-address})
或者避免使用正则表达式,您可以添加一个 “with”查询匹配器:
expect(WebMock).to have_requested(:get, "https://us-street.api.smartystreets.com/street-address").with(query: hash_excluding({}))
使用 hash_exclusion 然后不排除任何内容有点奇怪,但是 这个小技巧告诉 webmock any 查询参数应该匹配。