node.js - Mocha/ super 测试在测试完成后不退出

标签 node.js express testing mocha.js supertest

我正在使用 mocha 测试框架,并且在运行以下测试后它不会退出。
我试过 Promises 和 async await 都没有运气。 --exit 在 mocha 命令的末尾有效,但我想找到问题的根源。

我想知道在运行 beforeEach 和 afterEach 函数时是否是 knex 数据库连接。但是,除了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);
    });
});

最佳答案

对于遇到此问题并遇到类似问题的任何人。

使用以下链接;
- GitHub mocha debug example
- 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 连接到数据库,因此我已将以下代码添加到我的测试目录中的文件 helper.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();
});

关于node.js - Mocha/ super 测试在测试完成后不退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59900350/

相关文章:

node.js - 中间件实际上是如何工作的?

mysql - 在 MySQL 数据库中存储一系列 0 和 1

javascript - Passport.js/Google OAuth2 策略 - 如何在登录时使用 token 进行 API 访问

css - 我可以在响应式设计中测试视觉回归吗?

testing - 在 zombie.js 中缺少 Raphael 依赖项?

javascript - Protractor :使用 Canvas 元素 - ng-if/ng-show

node.js - node.js ChildProcess.fork() 中的字符编码

javascript - 如何从 node.js 服务器获得简单的响应?

javascript - 我如何使用 XMLHttpRequest() 不断地向我网站的另一个页面发送数据?

javascript - node.js 服务器泄漏 TCP 连接?