今天是我参与「第五届青训营 」伴学笔记创作活动的第 16 天.
什么是自动化测试
-
QA团队对整个系统进行端对端测试
-
在不同模块集成以后,QA团队对其正常通信和功能进行多维度测试
-
开发人员通过编码的方式对自己的代码进行正确性校验
为什么要做自动化测试
- 统一代码风格
- 组件Readme用例化,保持时效性
- 有效审视代码中的耦合逻辑
- 避免后续迭代影响到历史功能,发布breaking change
前端自动化测试的技术选型
Typescript
// ./App.test.tsx
import { mount } from "enzyme" ; import App from "./App";
describe("test", =>{
it( "first unit test",()=>{
const app = mount(<App l/>);
expect(app.find(".read-the-docs " ).getDOMINode( ).textContent).toEqual("click on the vite and React logos to learn more"
);
});
});
import React from "react" ;
import { render, screen } from "@testing-library/react";
import { DomQuery } from "../ components/DomQuery";
describe("tests for 《4 | DOA查询(上):页面元素的渲染和行为查询》&《5 │DOM查询(下);test( "default role", o) ->{
render(<App />);
const button = screen.getByRole("button" );screen.debug(button);
});
});
- Jest + React testing library + Cypress + storybook:
- 测试框架:Jest(提供一个可运行的环境、测试结构、结果报告、代码覆盖、断言、mocking . snapshot)
- 测试辅助库: react-testing-library (dom查询,断言和事件的模拟,React18推荐的Ul自动化的集大成测试辅助库)
- Cypress + storybook: E2E端对端测试,覆盖单元测试不易于覆盖的复杂场景
如何进行前端自动化测试
查询
-
Get:返回查询的匹配节点,如果没元素匹配,则会报错(针对单查如果查到多个也会报错);
-
Query:返回查询的匹配节点,如果没有元素匹配会返回null,但是不会报错(同样针对单查,如果查到多个匹配元素也会报错)
-
Find:返回一个 Promise,默认超时时间为1000 ms,如果没有元素匹配或者查找超时, Promise 状态切为reject(同样针对单查,如果查到多个元素,也会返回reject)。
事件模拟
-
针对这种场景,React Testing Library 提供了两种手段来模拟, fireEvent和userEvent
-
我们更推荐使用userEvent,相比fireEvent,
-
userEvent 更贴切真实场景地模拟了事件,而fireEvent只是调度对应的事件。 我们书写的用例应该尽可能从用户视角来展开,而不是代码层面,这样对于用例本身来说,才是更强健的