NodeJS 节点+测试:如何使用nock模拟API

rggaifut  于 2023-02-08  发布在  Node.js
关注(0)|答案(3)|浏览(165)

我尝试在单元测试中模拟API,如下所示:

const request = require('supertest');
const nock = require('nock');
const app = require('../app');

const agent = request.agent(app);
nock.disableNetConnect();
const userResponse = {
    user: {
      _id: '58828157ce4e140820e23648',
      info: {
        email: 'fake@test.io',
        password: '1',
        name: 'testx',
      },
};
  it('should register new user', (done) => {
    nock('http://localhost:5000')
      .post('/auth/register')
      .reply(200, userResponse);


    agent.post('/auth/register')
      .send({
        name: 'test',
        email: 'fake@test.io',
        password: '1',
      })
      .expect(200)
      .end((error, response) => {
        expect(response.body.user.info.email).to.equal('fake@test.io');
        expect(response.body.user.info.name).to.equal('test');
        done();
      });
  }).timeout(5000);

但我得到这个错误:
网络连接不允许错误:Nock:不允许“www.example.com“的网络连接127.0.0.1:54877/auth/register

cyej8jka

cyej8jka1#

看一下nock文档。nock.disableNetConnect阻止了真实的的http请求的发生,而且看起来你试图nock的端点运行在54877端口的服务器上,但是你似乎试图nock一个运行在5000端口的服务器。

fgw7neuy

fgw7neuy2#

如果要允许请求转到特定域的Internet,可以执行以下操作:

const unBlockedDomains = ['toto.com', 'tata.fr'];
nock.enableNetConnect(host =>
  Boolean(unBlockedDomains.find(domain => host.includes(domain))),
);
jdgnovmf

jdgnovmf3#

您可能需要允许nock使用localhost:将此行添加到您的tes或全局测试配置文件中。nock.enableNetConnect(/(localhost|127\.0\.0\.1)/);

相关问题