在我的函数中没有调用异步Mocha done()

时间:2017-11-12 14:06:39

标签: javascript typescript mocha webstorm chai

我调用此函数,调用控制台日志但未调用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()
        })
    })
})

结果是,'跑步测试'继续永远在旋转:

result

但是,如果我将“数据库”代码更改为此代码,它将按预期工作:

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

我在这里缺少什么?

1 个答案:

答案 0 :(得分:5)

由于您打开了数据库连接,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);
  });
});