1
我有一些簡單的基於Promise的代碼,儘管我嘗試了最好的時間(> 2000ms)。幫幫我?節點/摩卡測試超時
export function listCurrentUserPermissions(req, res, next) {
return UserPermission.findAll({
where: { accountId: req.user.tenant() }
}).catch((error) => {
console.log('-----------------------------------');
console.log(error);
console.log.bind(console);
console.log('-----------------------------------');
}).then((permissions) => {
return res.json({ userPermission: permissions.map(serializeUserPermission) });
}, next);
而且測試:
describe('GET /api/v0/permissions',() => {
it('shows the current users permissions',() => {
return api.listCurrentUserPermissions(req, res, next).then(() => {
expect(UserPermission.findAll).to.have.been.calledWithMatch({
where: { accountId: req.user.tenant() }
});
expect(next).to.have.beenCalled;
expect(next.lastCall.args[0].output.payload.statusCode).to.equal(200);
expect(next.lastCall.args[0].output.payload.permission).to.include(nonAdminPermission.permission);
});
});
})
的錯誤,我得到:
Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
console.log
不會被調用,但我可以證實,該代碼被稱爲與適當的參數,可以等。
不幸的是這種重構:( –
哦發生同樣的錯誤,woops不能通過'next'作爲成功回調,因爲它的節點式的(錯誤結果) (()=> {next()})' – jasonkarns
雖然你通常不需要調用'next',因爲這條路線是最後一行(它發送一個響應),不需要調用後續的中間件,所以我通常在promise上調用'.done'。 – jasonkarns