如何通过具有不同状态代码的Nock对同一URL进行后续调用

时间:2019-03-04 18:32:46

标签: node.js sinon nock

问题: 我想模拟一种情况,在同一HTTP调用上我得到不同的结果。具体来说,是第一次失败。 在某种程度上,这类似于dynamicMake的{​​{3}}功能 期望: 我希望,如果我在第一个电话上使用stub.onFirstCall()而在第二个电话上使用stub.onSecondCall(),我将能够完成上述任务。

once

1 个答案:

答案 0 :(得分:0)

正确的方法是简单地 致电Nock两次。

nock( some_url )
    .post( '/aaaa', bodyFn )
    .reply( 500, resp );
nock( some_url )
    .post( '/aaaa', bodyFn )
    .reply( 200, resp );

Nock的工作方式是每个调用都为some_url注册一个拦截器。 实际上,第一次调用some_url会清除第一个拦截器,依此类推。

docs中所述:

  

为网址设置拦截器并使用该拦截器时,   它已从拦截器列表中删除。这意味着您可以   拦截2个或更多对同一URL的调用并返回不同的内容   在每个。这也意味着您必须为   您将要遇到的每个请求,否则nock将引发错误   因为该URL在拦截器列表中不存在。如果没有   想要在使用时删除拦截器,可以使用   .persist()方法。