错误:Nock:与请求不匹配

Posted

技术标签:

【中文标题】错误:Nock:与请求不匹配【英文标题】:Error: Nock: No match for request 【发布时间】:2018-07-18 09:14:10 【问题描述】:

我收到以下错误

 error: 
    Error: Nock: No match for request 
     "method": "GET",
     "url": "http://localhost:3000/admin/orders/30075889/transactions.json",
     "headers": 
       "content-type": "application/json",
       "host": "localhost:3000"
     
    Got instead 
     "method": "GET",
     "url": "http://localhost:3000/admin/orders/30075889/transactions.json",
     "headers": 
       "content-type": "application/json",
       "host": "localhost:3000"
     
   

url和预期一样,不知道哪里错了,有指针吗?

【问题讨论】:

我正在调用 2 个 api,1 个是 post,1 个是 get。并做 Promise.all([1stApi, 2edApi])。但得到错误 - 错误:诺克:请求不匹配。当我将两者中的任何 1 放入 Promise.all() 中时,就可以正常工作了。有什么建议为什么会在 2 次 api 调用中发生这种情况? 【参考方案1】:

有时可能是encodedQueryParams: true 选项的问题

编码查询参数是这些天的默认行为,没有这样的选项也能很好地工作

【讨论】:

【参考方案2】:

你可以随时显示准备好的箭尾,它总是一个错字... ;)

console.log(nock.activeMocks());

【讨论】:

【参考方案3】:

使用.log(console.log) 查看确切的错误消息。

前:

nock('https://test.org/sample')
.persist()
.log(console.log)
.get('/test')
.query()
.reply(200, response);

当你使用它并运行测试时,你会在控制台中看到类似这样的东西

matching https://test.org/sample/test to GET https://test.org/sample/test with query(): **true/false**.

如果它说的是真的,那么你的请求应该是好的。但如果它显示为 false,请检查两个请求并确保它们匹配。

【讨论】:

它被弃用了吗? TypeError: nock(...).log is not a function 使用环境变量DEBUG=nock.*而不是.log(...),不再支持日志。即:DEBUG=nock.* jest -i your/test/file.test.js【参考方案4】:

默认情况下,Nock 拦截器不会持续存在。对于每个请求 nock 都需要一个拦截器。看起来您只设置了一次拦截器并期望它适用于每个请求。如果您希望拦截器持续使用.persist() 选项,如下所示。

var scope = nock('http://localhost.com')
  .persist()
  .get(/.*/)
  .reply(200, 'Nock all get requests!');

【讨论】:

I hace persist() 但错误仍然出现......它刚刚开始出现

以上是关于错误:Nock:与请求不匹配的主要内容,如果未能解决你的问题,请参考以下文章

如何查看 nock 是不是匹配请求?

如何使用 Nock 测试请求中的错误?

scp 因“协议错误:文件名与请求不匹配”而失败

Amazon S3 - 如何修复“我们计算的请求签名与签名不匹配”错误?

错误:在带有 nock 和 mock-store 的 Redux 应用程序的异步操作测试中,操作可能未定义

HTTP请求错误40040140240340440540640741241450