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

Dud*_*udi 4 node.js sinon nock

问题:我想模拟在同一个 http 调用中得到不同结果的情况。具体来说,第一次失败。在某种程度上,这类似于Sinon 的能力stub.onFirstCall()stub.onSecondCall() 期望:我预计如果我once在第一次调用和twice第二次调用时使用,我将能够完成上述操作。

nock( some_url )
    .post( '/aaaa', bodyFn )
    .once()
    .reply( 500, resp );
nock( some_url )
    .post( '/aaaa', bodyFn )
    .twice()
    .reply( 200, resp );
Run Code Online (Sandbox Code Playgroud)

Dud*_*udi 12

正确的方法是简单地调用Nock两次。

nock( some_url )
    .post( '/aaaa', bodyFn )
    .reply( 500, resp );
nock( some_url )
    .post( '/aaaa', bodyFn )
    .reply( 200, resp );
Run Code Online (Sandbox Code Playgroud)

Nock 的工作方式是每次调用都会为some_url. 实际上第一次调用some_url会清除第一个拦截器等等。

文档中所述

当您为 URL 设置拦截器并使用该拦截器时,它将从拦截器列表中删除。这意味着您可以拦截对同一 URL 的 2 个或更多调用,并在每个调用上返回不同的内容。这也意味着您必须为每个将要收到的请求设置一个拦截器,否则 nock 将抛出错误,因为该 URL 不存在于拦截器列表中。如果您不希望拦截器在使用时被删除,您可以使用 .persist() 方法。