因为兑现了承诺,Chai没有捕获到异常,我该如何解决?
这是我的考试。
describe('test.js', function() {
it('Ensures throwError() throws error if no parameter is supplied.', async function() {
expect(async function() {
const instance = new Class();
await instance.throwError();
}).to.throw(Error);
});
});
这是我的代码。
class Class{
async throwError(parameter) {
try {
if (!parameter) {
throw Error('parameter required');
}
} catch (err) {
console.log(err);
}
}
}
柴的消息。
AssertionError: expected [Function] to throw Error
但是我可以在调用堆栈上看到此消息。
(node:21792) UnhandledPromiseRejectionWarning: Error: Error: parameter required
答案 0 :(得分:1)
expect().to.throw()
仅支持同步功能。对于异步功能,您需要使用chai-as-promised。
例如
index.js
:
export class Class {
async throwError(parameter) {
if (!parameter) {
throw Error('parameter required');
}
}
}
index.test.js
:
import chai, { expect } from 'chai';
import chaiAsPromised from 'chai-as-promised';
import { Class } from '.';
chai.use(chaiAsPromised);
describe('62596956', function() {
it('Ensures throwError() throws error if no parameter is supplied.', async function() {
const instance = new Class();
await expect(instance.throwError(null)).to.eventually.rejectedWith(Error);
});
});
单元测试结果:
62596956
✓ Ensures throwError() throws error if no parameter is supplied.
1 passing (9ms)
----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------
All files | 100 | 50 | 100 | 100 |
index.ts | 100 | 50 | 100 | 100 | 3
----------|---------|----------|---------|---------|-------------------