jest mock axios请求

678 阅读1分钟
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 '';
    });
   });