Nock与中间件内部的HTTPS调用不匹配吗?

时间:2019-01-24 04:38:14

标签: node.js jestjs nock

我有一个中间件,可以通过请求与第三方服务执行身份验证。我通过超级代理执行此请求。显然,我想在测试中对此进行模拟,因为它会使它们的运行速度大大降低,并且还依赖于第三方服务器。

使用nock时,似乎根本找不到请求。我什至尝试使用记录器,它仅能接收本地端点的实际请求。 (尽管它使用了不熟悉的IP和端口?)。

我的中间件中的请求;

export default async (req, res, next) => {
      const user = await superagent
      .get(`https://example.com/session/`)
      .query({ session })
      .set('Api-Key', '1234');
}

我的Nock实例;

nock('https://example.com/session/')
  .persist()
  .get('/session/')
  .reply(200, {
    success: true,
    username: 'testuser',
  })
  .log(console.log);

1 个答案:

答案 0 :(得分:2)

您在这里有2个问题。

首先,您定义两次/session/

  • nock('https://example.com/session/')
  • .get('/session/')

选择:

  • nock('https://example.com').get('/session/')
  • nock('https://example.com/session/').get('/')

第二个问题,您正在向呼叫(.query({ session }))添加查询字符串,但是您没有使用.query(true)告诉Nock。

最后,您应该具有以下内容:

nock('https://example.com/session/')
  .persist()
  .get('/') // rewrote here
  .query(true) // added here
  .reply(200, {
    success: true,
    username: 'testuser',
  })
  .log(console.log);