问题:我想模拟一个情况,在同一个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 );
正确的方法是简单地两次调用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所述:
当您为URL设置拦截器并使用该拦截器时,它将从拦截器列表中删除。这意味着您可以拦截对同一URL的两次或多次调用,并在每个调用上返回不同的内容。这也意味着你必须为你将要拥有的每个请求设置一个拦截器,否则nock会抛出一个错误,因为拦截器列表中没有该URL。如果您不希望在使用拦截器时将其删除,则可以使用.persist()方法。