美文网首页
Jest 异步代码测试

Jest 异步代码测试

作者: Levid_GC | 来源:发表于2018-07-09 17:03 被阅读62次

Callback

回调是一种最常见的异步编程模式。

错误示例:

// 不要这么做!
test('the data is peanut butter', () => {
  function callback(data) {
    expect(data).toBe('peanut butter');
  }

  fetchData(callback);
});

问题处在于,一旦 fetchData 执行完毕,测试随即完毕,而不会等待 callback 回调的执行。

正确示例:

test('the data is peanut butter', done => {
  function callback(data) {
    expect(data).toBe('peanut butter');
    done();
  }

  fetchData(callback);
});

使用一个名为 done 的参数,Jest 会一直等待 done 回调的执行,一旦 done 回调执行完毕,测试即完成。如果 done 一直没有被回调,那么测试失败。

Promise

如果使用的是 promise,测试将更加简单。只需要在测试中返回一个 promise,Jest 会自动等待 promise 被解析处理,如果 promise 被拒绝,那么测试失败。

示例:

test('the data is peanut butter', () => {
  expect.assertions(1);
  return fetchData().then(data => {
    expect(data).toBe('peanut butter');
  });
});

test('the fetch fails with an error', () => {
  expect.assertions(1);
  return fetchData().catch(e => {
    expect(e).toMatch('error')
  });
});

注意:确保返回 promise,如果忽略掉 return,那么测试会在 fetchData 完成之前完成。

点击查看 expect.assertions(number) 的更多信息。

.resolve / .reject

示例:

test('the data is peanut butter', () => {
  expect.assertions(1);
  return expect(fetchData()).resolves.toBe('peanut butter');
});

test('the fetch fails with an error', () => {
  expect.assertions(1);
  return expect(fetchData()).rejects.toMatch('error');
});

Async/Await

同样,您也可以在测试中使用 asyncawait 关键字。想要编写异步测试,只需要在传递给 test 的函数前加上 async 关键字。

示例:

test('the data is peanut butter', async () => {
  expect.assertions(1);
  const data = await fetchData();
  expect(data).toBe('peanut butter');
});

test('the fetch fails with an error', async () => {
  expect.assertions(1);
  try {
    await fetchData();
  } catch (e) {
    expect(e).toMatch('error');
  }
});

您也可以将 async / await.resolve.reject 结合起来使用。

示例:

test('the data is peanut butter', async () => {
  expect.assertions(1);
  await expect(fetchData()).resolves.toBe('peanut butter');
});

test('the fetch fails with an error', async () => {
  expect.assertions(1);
  await expect(fetchData()).rejects.toMatch('error');
});

asyncawait 其实是 promise 的语法糖。

参考资料

相关文章

  • Jest测试异步代码

    JavaScript中经常有异步运行的代码。如果你要测试异步的代码,Jest需要知道他测试的代码是否已经完成异步动...

  • Jest 异步代码测试

    Callback 回调是一种最常见的异步编程模式。 错误示例: 问题处在于,一旦 fetchData 执行完毕,测...

  • Jest - 测试异步代码

    代码异步运行在 JavaScript 里很常见。当你有异步代码运行时,Jest 需要知道它正在测试的代码何时完成,...

  • vue jest 测试用例基本写法

    通过@vue/cli生成具有jest功能的代码 配置测试代码的覆盖率 jest.config.js添加 编写测试用...

  • 使用jest进行单元测试

    Jest 被 Facebook 用来测试包括 React 应用在内的所有 JavaScript 代码。Jest 的...

  • 02|初识jest

    在上篇文章中,我们通过封装代码的方式,实现了我们的代码测试。从本片文章中,我们将引入正式引入jest,开启jest...

  • jest

    Jest是一个JavaScript测试框架,由Facebook推出,用来测试所有JavaScript代码,包括Re...

  • 杂记4:React的测试

    React 的测试主要使用 jest 和 enzyme。 jest jest 主要用于测试 Redux 部分的内容...

  • Jest 是一款优雅、简洁的 JavaScript 测试框架

    为什么使用jest? Jest 是一款保障代码正确的 JavaScript 测试框架,提供开发者熟悉且功能完善的接...

  • 001 前端项目中加入jest , 并支持ts

    1 加入 jest ts-jest @types/jest jest 为测试框架tes-jest 用于转换t...

网友评论

      本文标题:Jest 异步代码测试

      本文链接:https://www.haomeiwen.com/subject/btgzuftx.html