【发布时间】:2017-11-12 14:06:39
【问题描述】:
我调用了这个函数,调用了控制台日志但是没有调用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()
})
})
})
这是结果,“正在运行的测试”会永远继续旋转:
但如果我将“数据库”代码更改为此,它会按预期工作:
setTimeout(function () {
console.log('lol')
done()
}, 1000)
我在这里错过了什么?
【问题讨论】:
-
Database.saveSessionData中的回调函数是否被调用? -
一般
done()前面有错误。尝试将您的期望包装在 try catch 中,并将 console.log/error 异常。 -
@marcel 它被调用,所以 2222 被打印出来。
-
根据您提供的图片,您的测试成功通过,在我看来,您的 mocha 测试只是挂起,因为您打开了数据库连接。通常你不想测试真实的数据库连接并使用 mocks/stubs/dependency injection 来为异步实用程序库注入测试行为。
-
顺便说一句,如果您仍然想创建真正的数据库连接,您可以使用 mocha 库的
after挂钩 - 它会在您调用类似 @987654328 的所有测试后启动您提供的回调@.
标签: javascript typescript mocha.js webstorm chai