CtrlK
BlogDocsLog inGet started
Tessl Logo

Vue 3 组件单元测试指南 (Vitest)

使用 Vitest 和 Vue Test Utils 的标准模版与断言技巧

Invalid
This skill can't be scored yet
Validation errors are blocking scoring. Review and fix them to unlock Quality, Impact and Security scores. See what needs fixing →
SKILL.md
Quality
Evals
Security

Vue 3 组件单元测试指南

采用 Vitest 作为测试运行器,配合 @vue/test-utils 进行组件测试。

环境准备

"devDependencies": {
  "vitest": "^1.0.0",
  "@vue/test-utils": "^2.4.0",
  "jsdom": "^23.0.0"
}

测试模版

import { mount } from '@vue/test-utils';
import { describe, it, expect, vi } from 'vitest';
import MyComponent from './MyComponent.vue';

describe('MyComponent.vue', () => {
  it('renders properly', () => {
    const wrapper = mount(MyComponent, {
      props: { title: 'Hello' }
    });
    expect(wrapper.text()).toContain('Hello');
  });

  it('emits event on click', async () => {
    const wrapper = mount(MyComponent);
    await wrapper.find('button').trigger('click');
    expect(wrapper.emitted()).toHaveProperty('submit');
  });
});

常用技巧

// Mock 第三方组件
const wrapper = mount(MyComponent, {
  global: { stubs: { 'bk-table': true } }
});

// Mock API(文件顶部)
vi.mock('@/api/user', () => ({
  getUserInfo: vi.fn(() => Promise.resolve({ id: 1 }))
}));

运行测试

npm run test:unit

📦 按需加载资源

资源URI
完整测试示例skill://unit-testing/assets/component.spec.ts

📦 可用资源

  • skill://unit-testing/assets/component.spec.ts

根据 SKILL.md 中的 IF-THEN 规则判断是否需要加载

Repository
TencentBlueKing/bk-bcs
Last updated
Created

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.