我想单元测试与摩卡+ chai + sinon控制器方法,但我努力了解断言如何与这些异步方法工作。下面是我的测试:异步测试从来没有调用完成()如果断言失败
it('should fetch all registered books and send them as json', (done) => {
res.json = sandbox.spy();
const books = [];
BookMock.expects('find').withArgs()
.resolves(books);
booksController.index(req, res,() => {
res.json.should.have.been.calledWith(200, { data: books });
done();
});
});
与这个测试的问题是,如果我改变断言期望的300
代替200
参数,例如,我的测试将停止(失败),并永远不会调用done()
,导致一个通用的失败告诉没有比'测试失败,因为完成从来没有被称为',其中没有说与测试失败的原因没有关系。
如果我保持这样的测试,并且我的控制器方法做得很好,测试通过并且一切正常,但是如果控制器做了任何错误,测试失败并且不会告诉我失败的原因(哪个应该是“res.json
没有用bla bla bla参数调用”)。
我也不确定这是单元测试控制器方法的正确方法,因为它们不会返回Promise我不能使用chai-as-promised或promise链,所以我使用了next()
回调函数(它总是使用restify调用)来做出断言,这可能是不对的,所以我打开一个完整的重构来使这个测试最正确。
预先感谢您!