Мокка / Супертест не завершается по завершении тестов - PullRequest
0 голосов
/ 24 января 2020

Я использую среду тестирования mocha, и после запуска следующего теста она не завершается. Я попробовал Promises и Asyn c безуспешно. --exit в конце команды mocha работает, но я хочу найти источник проблемы.

Мне интересно, является ли это соединением с базой данных knex при выполнении функций beforeEach и afterEach. Однако я не знаю, как отключить соединение db, кроме destroy (), и, если это используется, следующие тесты не запускаются.

Может ли кто-нибудь видеть в коде что-то, что может вызывать эту проблему? Или порекомендуете другой способ исправить это?


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


describe('Route: /' + route, () => {
    let token = '';
    let route = 'user';

    before(function (done) {
        const user = {email: 'admin@email.com', password: 'password'};
        request(app)
            .post('/login')
            .send(user)
            .end((err, res) => {
                token = res.body.token;
                done();
            });
    });

    beforeEach(async () => {
        await knex.migrate.rollback();
        await knex.migrate.latest();
        await knex.seed.run();
    });
    afterEach(() => knex.migrate.rollback());

    it(`should not be able to consume /${route} since no token was sent`, (done) => {
        request(app)
            .get(`/${route}`)
            .expect(401, done)
    });

    it(`should be able to consume /${route} since a valid token was sent`, (done) => {
        request(app)
            .get(`/${route}`)
            .set('Authorization', 'Bearer ' + token)
            .expect(200, done);
    });
});

1 Ответ

1 голос
/ 26 января 2020

Для всех, кто сталкивался с подобной проблемой.

Используя следующие ссылки:
- Пример отладки GitHub mocha
- Mocha docs - exit
- wtfnode

Мне удалось отладить проблему.
wtfnode, использованный в моем тесте, показал, что моя база данных все еще связана с чтением консоли.

const wtf = require('wtfnode');

after(wtf.dump());  // place within test describe body

Возвращено;

- Sockets:
  - 127.0.0.1:58898 -> 127.0.0.1:5432
    - Listeners:
      - connect: Connection.connect @ <user_path>/node_modules/pg/lib/connection.js:59

Я использую knex для подключения к базе данных, поэтому я добавил приведенный ниже код для помощника файла. js в моей тестовой директории.

/ test / helper. js

const knex = require('../database/db');


before(function () {
    if (!knex.client.pool) return knex.initialize();
});

beforeEach(async function () {
    await knex.migrate.rollback();
    await knex.migrate.latest();
    await knex.seed.run();
});

afterEach(function () {
    return knex.migrate.rollback()
});

after(function () {
    return knex.destroy();
});

...