10分钟上手DevEco Testing:编写你的第一个HarmonyOS5单元测试

171 阅读2分钟

以下为 ​​10分钟快速上手DevEco Testing编写HarmonyOS 5单元测试​​ 的极简指南,包含从环境配置到断言编写的完整ArkTS代码示例:


1. 环境准备 (1分钟)

  1. 确保DevEco Studio已安装​​最新测试插件​​:

    devecocli plugin install @ohos/testing
    
  2. 在项目根目录创建测试目录:

    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. 测试调试技巧

  1. ​聚焦测试​​:在describeit前加ffdescribe/fit)只运行该测试
  2. ​跳过测试​​:加xxdescribe/xit)跳过
  3. ​调试断点​​:在测试代码中添加debugger语句

9. 完整目录结构

your-project/
├── src/
│   ├── components/
│   │   └── MyButton.ets
├── test/
│   ├── unit/
│   │   ├── button-test.ets
│   │   ├── api-test.ets
│   │   └── jest.config.json

10. 下一步建议

  1. 尝试为你的业务组件编写测试

  2. 探索DevEco Testing文档

  3. 集成到CI流程:

    # .github/workflows/test.yml
    jobs:
      test:
        runs-on: ubuntu-latest
        steps:
          - run: devecocli test --coverage
    

通过本指南你已经掌握:

  1. 基础测试语法 ✅
  2. 组件测试方法 ✅
  3. 覆盖率生成 ✅
  4. 高效调试技巧 ✅