tdesign-mobile-react icon indicating copy to clipboard operation
tdesign-mobile-react copied to clipboard

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

Open anlyyao opened this issue 6 months ago • 40 comments

目前正在推进 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

  • [x] Button #710
  • [x] Divider #735
  • [ ] Fab
  • [x] Layout #749
  • [x] Link #709

导航 8

  • [ ] BackTop
  • [x] Drawer #767
  • [ ] Indexes
  • [ ] NavBar
  • [x] SideBar #776
  • [x] Steps #761
  • [x] TabBar #819
  • [ ] Tabs

输入 17

  • [x] Calendar #755
  • [ ] Cascader
  • [x] Checkbox #748
  • [x] ColorPicker #783
  • [x] DateTimePicker #806
  • [ ] Form
  • [x] Input #768
  • [ ] Picker
  • [x] Radio #736
  • [x] Rate #754
  • [ ] Search #784
  • [x] Slider #787
  • [ ] Stepper
  • [x] Switch #744
  • [x] Textarea #745
  • [ ] TreeSelect #778
  • [ ] Upload #807

数据展示 19

  • [x] Avatar #747
  • [x] Badge #730
  • [x] Cell #737
  • [ ] Collapse
  • [x] CountDown #781
  • [x] Empty #729
  • [x] Footer #727
  • [ ] Grid
  • [x] Image #769
  • [ ] ImageViewer #808
  • [ ] List #790
  • [x] Progress #728
  • [x] QRCode #731
  • [x] Result #743
  • [x] Skeleton #726
  • [ ] Sticky
  • [ ] Swiper #803
  • [x] Table #751
  • [x] Tag #788

消息提醒 13

  • [x] ActionSheet #789 #777
  • [ ] Dialog #780
  • [x] DropdownMenu #762
  • [ ] Guide #805
  • [x] Loading #724
  • [x] Message #779
  • [ ] NoticeBar
  • [x] Overlay #741
  • [ ] Popover
  • [x] Popup #732
  • [x] PullDownRefresh #774
  • [x] SwipeCell #810
  • [x] Toast #705 #734

anlyyao avatar Jul 31 '25 11:07 anlyyao

👋 @anlyyao,感谢给 TDesign 提出了 issue。 请根据 issue 模版确保背景信息的完善,我们将调查并尽快回复你。

github-actions[bot] avatar Jul 31 '25 11:07 github-actions[bot]

我来负责 Toast 组件

novlan1 avatar Aug 01 '25 06:08 novlan1

我来负责 Popup 组件

SinzoL avatar Aug 01 '25 07:08 SinzoL

我来负责 Link、Button组件

Boomkaa avatar Aug 01 '25 09:08 Boomkaa

我来负责 QRCode组件

MeoRinLime avatar Aug 04 '25 08:08 MeoRinLime

Tag、BackTop、Fab、Avatar 、Table组件已有人认领

novlan1 avatar Aug 07 '25 08:08 novlan1

我来负责 Image 组件

byq1213 avatar Aug 07 '25 08:08 byq1213

认领 loading

anlyyao avatar Aug 19 '25 10:08 anlyyao

认领 Badge

ZWkang avatar Aug 19 '25 12:08 ZWkang

认领 skeleton

anlyyao avatar Aug 20 '25 03:08 anlyyao

认领 progress

anlyyao avatar Aug 20 '25 04:08 anlyyao

认领 Footer

novlan1 avatar Aug 20 '25 07:08 novlan1

认领 Empty

lockiechen avatar Aug 21 '25 02:08 lockiechen

我来负责 Textarea 组件

Boomkaa avatar Aug 21 '25 02:08 Boomkaa

我来负责Radio组件

Cyrios-ykx avatar Aug 21 '25 07:08 Cyrios-ykx

我来负责 CountDown 组件

SinzoL avatar Aug 21 '25 08:08 SinzoL

认领 result 、switch

ZWkang avatar Aug 21 '25 08:08 ZWkang

我来负责 Checkbox 组件

JustGenius-s avatar Aug 22 '25 06:08 JustGenius-s

我来负责 Popover 组件

SinzoL avatar Aug 22 '25 08:08 SinzoL

我来负责 Avatar 组件

younggglcy avatar Aug 22 '25 11:08 younggglcy

我来负责Drawer组件

Cyrios-ykx avatar Aug 22 '25 11:08 Cyrios-ykx

我来负责 Avatar 组件

@younggglcy 上面Avatar看起来已经有人认领啦

ZWkang avatar Aug 22 '25 11:08 ZWkang

认领 Navbar

ZWkang avatar Aug 24 '25 05:08 ZWkang

认领 Table

Boomkaa avatar Aug 25 '25 03:08 Boomkaa

认领search、noticebar、navbar、picker、list

ZWkang avatar Aug 26 '25 08:08 ZWkang

我来负责 PullDownRefresh 组件

JustGenius-s avatar Aug 26 '25 09:08 JustGenius-s

认领 calendar

anlyyao avatar Aug 27 '25 04:08 anlyyao

认领 Dialog

Boomkaa avatar Aug 28 '25 06:08 Boomkaa

我来负责 Stepper 组件

xliudaxia avatar Aug 31 '25 17:08 xliudaxia

认领 Form

anlyyao avatar Sep 01 '25 06:09 anlyyao