多测师是一家拥有先进的教学理念,强大的师资团队,业内好评甚多的接口自动化测试培训机构!

17727591462

联系电话

您现在所在位置:接口自动化测试培训 > 新闻资讯

前端自动化测试框架Jest命令行工具的使用和异步代码的测试

更新时间:2022-06-08 09:30:34 作者:多测师 浏览:63

  Jest命令行工具的使用

  进入到 package.json 文件中,在 test 命令行后面加上 --watchAll 参数:

  "scripts": {

  "test": "jest --watchAll",

  "coverage": "jest --coverage"

  },

前端自动化测试框架Jest命令行工具的使用和异步代码的测试

  这样做的好处是,我们不需要每次都执行 npm run test,在第一次执行之后,进程会自动监听测试用例的变化,如果测试用例代码发生了变化,会自动执行。

  运行npm run test可以看到,进入到 Watch 模式中,有很多快捷键,这些快捷键的作用如下:

  按f键:只运行失败的测试用例

  按o键:只运行发生更改的测试用例

  按p键:按文件名regex模式进行筛选

  按t键:按测试名称regex模式进行筛选

  按q键:退出监测模式

  按Enter键:触发测试用例

  Jest 中有很多命令行工具,合理的使用命令行,会让我们的测试变的更加灵活、好用。

  异步代码的测试

  要测试异步代码,需要先编写异步代码,安装 axios,安装好 axios 之后,不管是在node环境还是浏览器环境,我们都可以发送请求了:

  npm install axios --save

  首先准备一个接口,这个接口的返回值是一个json对象:

  {

  "success": true

  }

  然后引入axios,编写一个异步函数,并且导出:

  import axios from "axios";

  export const getData = () => {

  return axios.get("http://www.dell-lee.com/react/api/demo.json");

  };

  在测试异步函数的时候,需要这样写:

  方法一

  Promises 规范

  测试成功的返回值:

  import { getData } from "./index";

  test("测试 getData 的返回值为 { success: true }", () => {

  return getData().then(res => {

  expect(res.data).toEqual({ success: true });

  });

  });

  在测试成功返回值的时候,需要在.then里面执行测试用例,而且必须在开头加上return,返回整个异步代码,否则这个测试是没有意义的。

  如果你忽略了这个return,你的测试将在异步函数返回的 promise 解析之前完成。

  测试失败的返回值:

  import { getData } from "./index";

  test("测试 getData 的返回值包含 404", () => {

  return getData().catch(err => {

  expect.assertions(1);

  expect(err.toString()).toMatch("404");

  });

  });

  在测试失败返回值的时候,需要在.catch里面执行测试用例,但是这样做的话,如果请求发送成功,异步函数走进了.then回调,.catch里面的内容不会被执行,相当于这个测试用例没有做任何事情,还是照样能通过测试。

  要解决这个问题,需要在前面加上expect.assertions(1);,用来断言这个测试用例调用了一定数量的expect,如果调用次数不够,测试用例就不会通过。

  方法二

  .resolves 匹配器 / .rejects 匹配器

  测试成功的返回值:

  import { getData } from "./index";

  test("测试 getData 的返回值为 { success: true }", () => {

  return expect(getData()).resolves.toEqual({ success: true });

  });

  你也可以在 expect 语句中使用.resolves匹配器,Jest将等待该 Promises 函数被 resolve。

  如果 Promises 函数被 reject,测试用例将自动失败。

  测试失败的返回值:

  import { getData } from "./index";

  test("测试 getData 的返回值包含 404", () => {

  return expect(getData()).rejects.toMatch("404");

  });

  同理,你也可以在 expect 语句中使用.rejects匹配器,Jest将等待该 Promises 函数被 reject。

  如果 Promises 函数被 resolve,测试用例将自动失败。

  方法三

  Async / Await

  测试成功的返回值:

  import { getData } from "./index";

  test("测试 getData 的返回值为 { success: true }", async () => {

  const { data } = await getData();

  expect(data).toEqual({ success: true });

  });

  你也可以像编写普通的 js 代码那样,给 test 方法的回调函数传递 async 关键字,在 expect 语句前使用await关键字调用异步函数拿到返回值。

  测试失败的返回值:

  import { getData } from "./index";

  test("测试 getData 的返回值包含 404", async () => {

  expect.assertions(1);

  try {

  await getData();

  } catch (err) {

  expect(err.message).toMatch("404");

  }

  });

  同理,如果需要测试失败的返回值,你需要使用原生 js 中的 try / catch 语句来捕获异常,同时配合 expect.assertions(1); 用来校验这个测试用例调用了一定数量的expect。如果调用次数不够,说明这里没有捕获到异常,测试用例就不会通过。

  方法四

  结合使用

  Async、Await 和 .resolves、.rejects 结合使用。

  import { getData } from "./index";

  test("测试 getData 返回成功", async () => {

  await expect(getData()).resolves.toEqual({ success: true });

  });

  test("测试 getData 返回失败", async () => {

  await expect(getData()).rejects.toMatch("404");

  });

  在这种情况下,async 和 await 与 promise 示例使用的逻辑是相同的语法。

  以上内容为大家介绍了前端自动化测试框架Jest命令行工具的使用和异步代码的测试,本文由多测师亲自撰写,希望对大家有所帮助。了解更多自动化测试相关知识:https://www.aichudan.com/xwzx/

联系电话

17727591462

返回顶部