jest 异常捕获【async函数】
按照jest文档是用 toThrow,但是这个时候就会提示错误没有被catch包裹,后面才发现,需要使用try/catch包裹再来做测试,因为我是一个async的方法,如果就是普通的函数就直接使用toThrow就可以的
it('try', async () => {
try {
await Promise.reject('错误捕获');
} catch (err: any) {
expect(err.message).toBe('错误捕获');
}
});
或者只要判断抛出错误类型就可以
const promise = new Promise((resolve, reject) => reject("错误"));
promise.catch(err => {
expect(err).toBeInstanceOf(Error);
});
jest mock一个axios请求
我这边的需求是请求当前网址读取meta里面的内容,添加这个在jest里面就可以,当前单元测试的请求都会走mock数据
const RES1_HTML = fs.readFileSync(`${__dirname}/__fixtures__/res1.html`, 'utf-8');
const RES2_HTML = fs.readFileSync(`${__dirname}/__fixtures__/res2.html`, 'utf-8');
// MorphoQuerier可以换成你自己的请求方法 或者axios
beforeEach(() => {
// @ts-ignore
jest.spyOn(MorphoQuerier.prototype, 'request').mockImplementation((url: string) => {
if (url === 'https://res1.html') {
return { data: RES1_HTML };
}
if (url === 'https://res2.html') {
return { data: RES2_HTML };
}
return '';
});
});