我使用mocha测试框架和chai断言库(我是所有这3个中的新手)在TypeScript中编写了一些测试,并且发现错误被抛出并且在下面的代码中调用了assert.fail()。但是,测试仍然标记为通过。我很困惑为什么会发生这种情况,如果我对承诺做错了。此外,如下所示,还有一个UnhandledPromiseRejectionWarning。我不明白为什么这被标记为未处理,因为我已经包含了一个catch块。对于如何解决这个问题,我将不胜感激,谢谢!
User.all()
.then((users) => {
expect(users.length).to.equal(0);
return User.create('test@test.email', '12345', 'test', true, true);
})
.then(() => {
return User.all();
})
.then((users) => {
expect(users.length).to.equal(1);
})
.catch((error) => {
assert.fail();
});
DEBUG CONSOLE
✓ should create a new record
with existing e-mail in the database
(node:29903) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 3): AssertionError: assert.fail()
(node:29903) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
答案 0 :(得分:5)
正如Benjamin Gruenbaum上面所说,通过确保it块返回一个承诺来解决这个问题
it('should create a new record', () => {
return User.all()
.then((users) => {
expect(users.length).to.equal(0);
return User.create('test@test.email', '12345', 'test', true, true);
})
.then(() => {
return User.all();
})
.then((users) => {
expect(users.length).to.equal(1);
})
.catch((error) => {
assert.fail();
});
});