lambdatest/agent-skills

vitest-skill

Generates Vitest tests in JavaScript/TypeScript with Vite-native speed.

查看源码

使用方法

  1. 复制安装命令,在自己的智能体环境安装前先检查源码包。
  2. 从原始文档核对所需工具、凭据和支持的宿主。
  3. 说明输入材料与期望交付物,并对照来源检查输出。
npx skills add https://github.com/lambdatest/agent-skills --skill vitest-skill

开始前需了解

  • 安装不包含模型订阅、API 额度或访问文件的权限。
  • 仓库星数和安装量反映活跃情况,不等于独立质量或安全测试。
仓库原始内容

按源仓库内容呈现,保留标题、案例、代码、表格、链接以及原文引用的演示图片。

Vitest Testing Skill

Core Patterns

Basic Test

typescript
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { Calculator } from './calculator';

describe('Calculator', () => {
  let calc: Calculator;
  beforeEach(() => { calc = new Calculator(); });

  it('adds two numbers', () => {
    expect(calc.add(2, 3)).toBe(5);
  });

  it('throws on divide by zero', () => {
    expect(() => calc.divide(10, 0)).toThrow();
  });
});

Mocking (vi instead of jest)

typescript
import { vi } from 'vitest';

// Mock module
vi.mock('./database', () => ({
  getUser: vi.fn().mockResolvedValue({ name: 'Alice' }),
  saveUser: vi.fn().mockResolvedValue(true),
}));

// Mock function
const mockFn = vi.fn();
mockFn.mockReturnValue(42);
mockFn.mockResolvedValue({ data: 'test' });

// Spy
const spy = vi.spyOn(console, 'log').mockImplementation(() => {});
expect(spy).toHaveBeenCalledWith('message');
spy.mockRestore();

// Timers
vi.useFakeTimers();
vi.advanceTimersByTime(1000);
vi.runAllTimers();
vi.useRealTimers();

In-Source Testing

typescript
// src/math.ts — tests alongside code!
export function add(a: number, b: number) { return a + b; }
export function multiply(a: number, b: number) { return a * b; }

if (import.meta.vitest) {
  const { it, expect } = import.meta.vitest;
  it('adds', () => { expect(add(2, 3)).toBe(5); });
  it('multiplies', () => { expect(multiply(3, 4)).toBe(12); });
}

Snapshot Testing

typescript
it('serializes user', () => {
  expect(serializeUser(user)).toMatchSnapshot();
});

it('inline snapshot', () => {
  expect(serializeUser(user)).toMatchInlineSnapshot(`
    { "name": "Alice", "email": "alice@test.com" }
  `);
});

React Component Testing

typescript
import { render, screen } from '@testing-library/react';
import { describe, it, expect } from 'vitest';
import Button from './Button';

describe('Button', () => {
  it('renders with label', () => {
    render(<Button label="Click me" />);
    expect(screen.getByText('Click me')).toBeDefined();
  });
});

Anti-Patterns

BadGoodWhy
jest.fn()vi.fn()Vitest uses vi
jest.mock()vi.mock()Different namespace
No type safetyTypeScript + strictVitest is TS-first

Quick Reference

TaskCommand
Run oncenpx vitest run
Watchnpx vitest (default)
UInpx vitest --ui
Coveragenpx vitest --coverage
Specific filenpx vitest run src/math.test.ts
Filternpx vitest run -t "adds"

vitest.config.ts

typescript
import { defineConfig } from 'vitest/config';
export default defineConfig({
  test: {
    globals: true,
    environment: 'jsdom',
    coverage: { provider: 'v8', reporter: ['text', 'html'] },
    include: ['src/**/*.{test,spec}.{js,ts,tsx}'],
    includeSource: ['src/**/*.{js,ts}'],
  },
});

Deep Patterns → reference/playbook.md

§SectionLines
1Production ConfigurationConfig, workspace, setup file
2Mocking Patternsvi.mock, spies, timers, fetch
3React Testing LibraryComponents, hooks, providers
4Snapshot & Inline SnapshotsFile, inline, serializers
5Table-Driven Teststest.each, describe.each
6In-Source TestingCo-located tests in source
7API / Integration TestingServer tests with fetch
8CI/CD IntegrationGitHub Actions, scripts
9Debugging Quick-Reference10 common problems
10Best Practices Checklist13 items

按任务相关推荐

来自同一仓库

更多 Skills

全部 Skills