我正在編寫一個單元測試來測試我的postgres模式。我使用node-pg,mocha,sinon和chai。當失敗時測試不會調用done()
這工作 - 測試通過沒有問題:
describe('When adding a user',()=> {
it('should reject since email is used somewhere else', (done)=> {
pool.query(`INSERT INTO users(email, id, token)
VALUES($1, $2, $3)`, ['[email protected]', '12346', 'fooToken'])
.then((result)=> {
console.log('nothing in here runs, you will not see this');
done()
})
.catch((result) => {
result.constraint.should.have.string('email_already_exists');
done();
})
})
});
但是,爲了確保我沒有得到一個誤報,我改變斷言到result.constraint.should.not.have.string('email_already_exists');
故意使測試失敗。
而不是測試失敗,我得到Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
。
我在做什麼?
如果您正在測試基於承諾的代碼,您應該考慮使用Mocha的內置[promises支持](https://mochajs.org/#working-with-promises)。更容易防止這樣的問題。 – robertklep
@robertklep這個承諾如何支持在節點中測試2次讀取? http://stackoverflow.com/questions/43690868/how-to-assert-stubbed-fetch-more-than-once/43806205#43806205 – dman
一個很好的例子:https://coderwall.com/p/axugwa/cleaning-這個問題中的數據庫之間的摩卡測試與pg-promise –