我想單元測試與摩卡+ 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調用)來做出斷言,這可能是不對的,所以我打開一個完整的重構來使這個測試最正確。
預先感謝您!