Skip to content

mobile-react 测试覆盖率提升与组件功能自查 #697

@anlyyao

Description

@anlyyao

目前正在推进 tdesign-mobile-react 的组件库的测试覆盖率提升、组件 API 功能自查和组件示例视觉还原走查。

组件库概况

  • 组件数:63

任务说明

具体有以下 3 个点:

1. 测试覆盖率提升

标准如下

  • 行覆盖率达 95%+
  • 分支覆盖率 95%+
  • 语句覆盖率 95%+
  • 有交互的组件,需要覆盖所有场景,要求函数覆盖率 95+%

2. 组件 API 功能自查

  • Mobile React 正处于快速迭代阶段,组件 API 功能存在不稳定性或者功能实现有误,需对每个组件功能点撰写单元测试,进行功能自查然后修复

3. 组件示例视觉还原自查

figma 地址:https://www.figma.com/design/jivYXTMTP3jEkeZXWbMh4J/branch/4SdclZkcv5bPgX6pa8AsmI/TDesign-for-mobile?node-id=750-23479&p=f&m=dev

  • 对齐视觉

如何开始?

认领任务

认领方式:直接评论 “我来负责 xxx 组件” 即可。

单元测试

Tips

  • Vitest 单元测试框架:文档
  • 若开发工具为 vscode ,可以安装 Vitest 插件
  • 若开发工具为 WebStorm,可以安装 Vitest Runner 插件

1. 创建单元测试文件 and 文件命名规则

  • 测试文件统一放置在对应组件目录下的 __tests__ 文件夹中。
  • 命名规则:
    • 组件测试文件:[组件名].test.tsx,例如 form.test.tsx
    • 多子组件场景:每个子组件单独编写测试文件,例如 form.test.tsxform-item.test.tsx
    • 组件内部 hooks 测试文件:[组件名].hooks.test.tsx,例如 form.hooks.test.tsx
    • 组件内部 utils 测试文件:同 hooks 规则,例如 form.utils.test.tsx

2. 编写单元测试

单元测试应覆盖组件以下内容:

  • 组件本身的功能和行为。
  • 组件内部的 hooks(自定义 Hook)。
  • 组件内部的 utils(工具函数)。

组件测试文件按照 props、events、slots 进行,格式如下:

describe('DropdownMenu', () => {
  describe('props', () => {
    it(':style', () => {})
  })
  describe('event', () => {
      it(':click', () => {})
    })
  describe('slots', () => {
      it(':default', () => {})
    })
})

可参考:https://github.com/Tencent/tdesign-mobile-react/blob/develop/src/badge/__tests__/index.test.tsx

3. 检测测试用例

如果写的是 Button 组件的测试用例,可通过命令行,单独执行 Button 组件的测试用例,减少运行时间,如下所示。

npm run test:unit button

4. 查看单元测试覆盖率

确认测试用例通过后,可通过命令行,查看测试覆盖率。

红色部分表示完全没有覆盖的语句,黄色表示分支未覆盖,绿色表示覆盖,绿色的文字表示执行的次数

npm run test:unit-gui
npm run test:unit-gui button --coverage  //指定组件

5. 现有测试用例的优化

  • 已有部分测试用例的组件,在补充新用例的同时,辛苦顺便对现有测试用例进行优化一下
  • 优化内容包括但不限于:
    • 补充遗漏的分支和函数调用。
    • 按照上述命名和存放规范调整测试文件结构。
    • 提升测试用例的可读性和覆盖率。

6. 更新组件测试覆盖率徽标

npm run generate:coverage-badge

提交代码

恭喜你,成功完成一份单元测试,往更专业的前端更进一步!!

如果更新了组件 demo,需要更新 snapshot

npm run test:demo
npm run test:snap-update

激励

参与共建的开发者,将可以获得 TDesign 周边(贴纸、鼠标垫、工卡套等);

成为核心贡献者,将会拥有 TDesign 专属头像。

具体进展

基础 5

导航 8

输入 17

数据展示 19

消息提醒 13

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions