我的函数中未调用 Async Mocha done()

Async Mocha done() isn't called in my function

我调用了这个函数,调用了控制台日志但没有调用 done():

import {Database} from "../../code/server/Database";
import 'mocha'
const expect = require('chai').expect

describe('Database save', function() {
    it('should save without error', function(done) {
        Database.saveSessionData(1, 2, 3, function(err, docs) {
            expect(err).to.equal(null)
            expect(docs.sessionOpenTime).to.equal(1)
            expect(docs.sessionCloseTime).to.equal(2)
            expect(docs.sessionLength).to.equal(3)
            console.log(2222)
            done()
        })
    })
})

这是结果,'Running tests' 继续旋转下去:

但是如果我将 'Database' 代码改成这样,它会按预期工作:

setTimeout(function () {
            console.log('lol')
            done()
        }, 1000)

我在这里错过了什么?

Mocha 测试挂起,因为您打开了数据库连接。

有两种方案可以解决这个问题:

如果您在测试中不需要真正的数据库连接:

如果您需要在测试中执行真实连接:

  • 考虑为您的 mocha 测试添加一个 after 挂钩:

假设 mongodb 被用作数据库(没关系,但它会 是一个实际工作的例子)

const mongoose = require('mongoose');
const expect = require('chai').expect;

mongoose.connect('mongodb://localhost/test');

after(() => {
  mongoose.connection.close();
});

describe('db connection', () => {
  it('should make a test', () => {
    expect(1).to.equal(1);
  });
});