以下为 10分钟快速上手DevEco Testing编写HarmonyOS 5单元测试 的极简指南,包含从环境配置到断言编写的完整ArkTS代码示例:
1. 环境准备 (1分钟)
-
确保DevEco Studio已安装最新测试插件:
devecocli plugin install @ohos/testing -
在项目根目录创建测试目录:
mkdir -p test/unit
2. 最小测试示例 (3分钟)
2.1 创建测试文件
// test/unit/first-test.ets
import { describe, it, expect } from '@ohos/test';
describe('我的第一个测试套件', () => {
it('数字相加应该正确', () => {
const result = 1 + 1;
expect(result).toBe(2);
});
});
2.2 运行测试
# 执行单个测试文件
devecocli test test/unit/first-test.ets
# 执行所有测试
devecocli test test/unit/*.ets
3. 组件测试实战 (4分钟)
3.1 测试简单组件
// test/unit/button-test.ets
import { render, fireEvent } from '@ohos/test';
import MyButton from '../../src/components/MyButton.ets';
describe('按钮组件测试', () => {
it('点击应触发事件', () => {
const onClick = jest.fn();
const { getByText } = render(<MyButton onClick={onClick} />);
fireEvent.click(getByText('点击我'));
expect(onClick).toHaveBeenCalled();
});
it('禁用状态应不响应', () => {
const onClick = jest.fn();
const { getByText } = render(
<MyButton disabled onClick={onClick} />
);
fireEvent.click(getByText('点击我'));
expect(onClick).not.toHaveBeenCalled();
});
});
3.2 模拟依赖
// test/unit/api-test.ets
import { mock } from '@ohos/test';
import { fetchData } from '../../src/api';
mock('../../src/api', () => ({
fetchData: jest.fn().mockReturnValue('模拟数据')
}));
describe('API测试', () => {
it('应返回模拟数据', async () => {
const result = await fetchData();
expect(result).toBe('模拟数据');
});
});
4. 测试覆盖率 (2分钟)
4.1 添加覆盖率配置
// test/unit/jest.config.json
{
"collectCoverage": true,
"coverageDirectory": "./coverage",
"collectCoverageFrom": [
"src/**/*.ets"
]
}
4.2 生成报告
devecocli test --coverage
查看生成的HTML报告:
open coverage/lcov-report/index.html
5. 常用断言速查表
| 断言类型 | 示例 | 说明 |
|---|---|---|
| 值相等 | expect(a).toBe(b) | 严格相等 |
| 对象包含 | expect(obj).toContain(key) | 检查属性 |
| 异步结果 | await expect(promise).resolves.toBe(1) | 等待Promise解决 |
| 函数调用 | expect(fn).toHaveBeenCalledWith(arg) | 参数匹配 |
6. 测试生命周期
describe('生命周期示例', () => {
beforeAll(() => console.log('整个套件前'));
afterAll(() => console.log('整个套件后'));
beforeEach(() => console.log('每个测试前'));
afterEach(() => console.log('每个测试后'));
it('示例测试', () => {
console.log('执行测试');
});
});
7. 高级技巧:组件快照测试
// test/unit/snapshot-test.ets
import { render } from '@ohos/test';
import Header from '../../src/components/Header.ets';
it('Header组件快照匹配', () => {
const { toJSON } = render(<Header title="首页" />);
expect(toJSON()).toMatchSnapshot();
});
8. 测试调试技巧
- 聚焦测试:在
describe或it前加f(fdescribe/fit)只运行该测试 - 跳过测试:加
x(xdescribe/xit)跳过 - 调试断点:在测试代码中添加
debugger语句
9. 完整目录结构
your-project/
├── src/
│ ├── components/
│ │ └── MyButton.ets
├── test/
│ ├── unit/
│ │ ├── button-test.ets
│ │ ├── api-test.ets
│ │ └── jest.config.json
10. 下一步建议
-
尝试为你的业务组件编写测试
-
集成到CI流程:
# .github/workflows/test.yml jobs: test: runs-on: ubuntu-latest steps: - run: devecocli test --coverage
通过本指南你已经掌握:
- 基础测试语法 ✅
- 组件测试方法 ✅
- 覆盖率生成 ✅
- 高效调试技巧 ✅