Шуточный тест пройден, но выдает ошибку: подключите ECONNREFUSED 127.0.0.1:80 в конце

Я использую узел с TypeScript на моей серверной части, а также шутки и супертесты в качестве тестовой среды на моей серверной части.

Когда я пытаюсь проверить, у меня есть результат, но в конце я получаю сообщение об ошибке. Вот результат:

 PASS  test/controllers/user.controller.test.ts
  Get all users
    ✓ should return status code 200 (25ms)

  console.log node_modules/@overnightjs/logger/lib/Logger.js:173
    [2019-12-05T04:54:26.811Z]: Setting up database ...

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        3.284s
Ran all test suites.
server/test/controllers/user.controller.test.ts:32
                throw err;
                ^

Error: connect ECONNREFUSED 127.0.0.1:80
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1104:14)
npm ERR! Test failed.  See above for more details.

вот мой тестовый код:

import request from "supertest";
import { AppServer } from '../../config/server';

const server = new AppServer();

describe('Get all users', () => {
  it('should return status code 200', async () => {
    server.startDB();
    const appInstance = server.appInstance;
    const req = request(appInstance);
    req.get('api/v1/users/')
      .expect(200)
      .end((err, res) => {
        if (err) throw err;
      })
  })
})

вот моя настройка сервера. Я использую overnightjs на своем сервере

Я создал геттер для получения экспресс-экземпляра. это исходит от nightjs

// this should be the very top, should be called before the controllers
require('dotenv').config();

import 'reflect-metadata';

import { Server } from '@overnightjs/core';
import { Logger } from '@overnightjs/logger';
import { createConnection } from 'typeorm';
import helmet from 'helmet';
import * as bodyParser from 'body-parser';
import * as controllers from '../src/controllers/controller_imports';

export class AppServer extends Server {
  constructor() {
    super(process.env.NODE_ENV === 'development');
    this.app.use(helmet());
    this.app.use(bodyParser.json());
    this.app.use(bodyParser.urlencoded({ extended: true }));
    this.setupControllers();
  }

  get appInstance(): any {
    return this.app;
  }

  private setupControllers(): void {
    const controllerInstances = [];

    // eslint-disable-next-line
    for (const name of Object.keys(controllers)) {
      const Controller = (controllers as any)[name];
      if (typeof Controller === 'function') {
        controllerInstances.push(new Controller());
      }
    }

    /* You can add option router as second argument */
    super.addControllers(controllerInstances);
  }

  private startServer(portNum?: number): void {
    const port = portNum || 8000;
    this.app.listen(port, () => {
      Logger.Info(`Server Running on port: ${port}`);
    });
  }

  /**
   * start Database first then the server
   */
  public async startDB(): Promise<any> {
    Logger.Info('Setting up database ...');
    try {
      await createConnection();
      this.startServer();
      Logger.Info('Database connected');
    } catch (error) {
      Logger.Warn(error);
      return Promise.reject('Server Failed, Restart again...');
    }
  }
}

Я прочитал это. ссылка, поэтому я назвал метод startDB


person aRtoo    schedule 05.12.2019    source источник


Ответы (4)


Итак, я понял, и решение довольно простое. Я не могу объяснить, почему.

это req.get('api/v1/users/') должно быть /api/v1/users вам нужен ведущий /.

person aRtoo    schedule 06.12.2019
comment
Это должен быть принятый ответ, исправил его и для меня. - person greatTeacherOnizuka; 17.04.2020
comment
Вполне понятно, что это работает. вот почему: webmasters.stackexchange.com/questions/56840/ - person Native Coder; 13.10.2020

Для фронтенда...

Если вы используете axios и столкнулись с этой ошибкой, перейдите в файл testSetup.js и добавьте эту строку

axios.defaults.baseURL = "https://yourbaseurl.com/"

Это сработало для меня. Так что, как правило, это проблема baseURL.

person Kenshinman    schedule 27.06.2020
comment
Хотя я бы не стал углубляться в глобальный файл, я нахожу эту информацию очень полезной. Спасибо. :) - person LSR; 28.07.2020
comment
Спасибо, это исправило это для меня. Просто хотел добавить, что вам нужно импортировать import axios from "axios"; перед установкой базового URL-адреса по умолчанию. - person Artan M.; 01.06.2021

Немного другая проблема, но то же сообщение об ошибке...

У меня была эта ошибка при использовании node-fetch при попытке подключиться к моему собственному локальному хосту (http://localhost:4000/graphql), и после того, как я попробовал то, что казалось всем под солнцем, моим самым надежным решением было:

используя этот скрипт в package.json: "test": "NODE_ENV=test jest --watch" Если терминал показывает ошибку подключения, я просто иду к терминалу, наблюдая за Jest, и нажимаю a, чтобы повторно запустить все тесты, и они проходят без проблем.

¯\_(ツ)_/¯

Уровень успеха продолжал улучшаться, переименовав папку тестирования в __tests__ и переместив мою index.js в src/index.js.

Очень странно, но я слишком измотан, чтобы посмотреть на внутренности Jest и понять почему.

person danst3in    schedule 04.02.2021

Правила супертеста такие же, как и правила экспресса. Однако OvernightJS не требует начального или завершающего «/».

person Community    schedule 03.01.2020