我正在使用 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/