expect(WebMock).to have_requested(:get, "any url")

问题描述 投票:0回答:2

我正在将 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。

提前致谢!

rspec webmock
2个回答
1
投票

根据 readme,您可以将 URI 与

/regex/
相匹配,如下所示:

stub_request(:any, /example/)

0
投票

您可以使用 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 查询参数应该匹配。

© www.soinside.com 2019 - 2024. All rights reserved.