【问题标题】:Is there a way to use cascading rules for RSpec HTTP stubs?有没有办法为 RSpec HTTP 存根使用级联规则?
【发布时间】:2016-11-04 00:13:35
【问题描述】:

我正在为向外部服务调用多个 http 请求的方法编写单元测试。

它首先调用一个索引路由,比如“http://api.com/things

然后它遍历索引中的每个元素并调用“显示路线”,例如“http://api.com/things/123

你看,唯一的区别是“show”路径末尾的/123

现在我有一个用于索引路由的存根。

   WebMock::API.stub_request(
      :get,
      /.*api\.com\/things.*/
    ).to_return(<something>)

问题在于这会拦截对“show”路由的调用。

我想为“show”路线做一个不同的模拟。我想不必深入研究正则表达式来做到这一点。

有没有一种方法可以像在 Sinatra 或 Rails 中使用路由一样设置 http 模拟 - 换句话说,如果文件中较高的匹配项,则不会命中较低的匹配项?

【问题讨论】:

    标签: ruby-on-rails ruby unit-testing rspec


    【解决方案1】:

    正则表达式并不复杂,而且会相互排斥,所以应该可以正常工作。

    对于索引

       WebMock::API.stub_request(
          :get,
          /.*api\.com\/things$/
        ).to_return(<something>)
    

    为了表演

       WebMock::API.stub_request(
          :get,
          /.*api\.com\/things\/\d/
        ).to_return(<something>)
    

    【讨论】:

    • 鉴于我的问题中的信息,您的答案是正确的。我想没有显示我的实际应用程序代码是我的错,但我不得不稍微改变一下以使其工作。 to_return 可以占用一个块(通过 url)所以在那里,我做了类似if url.include?("123") &lt;do x&gt; else &lt;do y&gt; 的事情。
    • 嗯,是的,您的要求是为 showindex 提供不同的模拟,但这很酷,只要您有解决方案。
    猜你喜欢
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多