我有一个函数可以通过将函数(错误,结果){...}作为参数进行回调来解析。我试图使用mocha来测试这个函数,但问题是函数异步返回,因此我没有放置done()的好地方。如果我放入我的结果处理程序,它需要太长时间并且mocha超时。如果我把它放在外面,测试总是通过,因为处理程序还没有被调用。这是我的代码。什么是最好的解决方法?
lbl.createLabels是一个函数,它接受一组客户和一个目录,并在该目录中创建一堆文件,然后异步调用类型为:function(error,callback)的回调。
describe('Tests', () => {
it('returns a list of customer objects', (done) => {
lbl.createLabels(customers, __dirname + "/..", (err, result) => {
err.should.equal(undefined)
result.should.be.a('array')
result[0].should.have.property('id')
result[0].should.have.property('tracking')
result[0].should.have.property('pdfPath')
const a = {prop:3}
a.prop.should.be.an('array')
done() // putting done() here results in a timeout
})
done() // putting done here results in the test exiting before the callback gets called
})
})
答案 0 :(得分:1)
Mocha的文档有一整节描述了如何测试异步代码:
https://mochajs.org/#asynchronous-code
使用Mocha测试异步代码并不简单!只需在测试完成后调用回调。通过向
done
添加回调(通常名为it()
),Mocha将知道它应该等待调用此函数来完成测试。describe('User', function() { describe('#save()', function() { it('should save without error', function(done) { var user = new User('Luna'); user.save(function(err) { if (err) done(err); else done(); }); }); }); });