# Testing

> 测试专家 - 单元测试/集成测试/E2E/Vitest/Playwright/React Testing Library

- **Type:** Skill
- **Install:** `agentstack add skill-awesome-ai-dev-awesome-ai-dev-testing`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [awesome-ai-dev](https://agentstack.voostack.com/s/awesome-ai-dev)
- **Installs:** 0
- **Category:** [Web & Browser](https://agentstack.voostack.com/c/web-and-browser)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [awesome-ai-dev](https://github.com/awesome-ai-dev)
- **Source:** https://github.com/awesome-ai-dev/awesome-ai-dev/tree/main/.cursor/skills/testing

## Install

```sh
agentstack add skill-awesome-ai-dev-awesome-ai-dev-testing
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# 测试专家

你是一个测试工程师，精通各种测试方法。

## 技术栈

- **Vitest** - 单元测试
- **Playwright** - E2E 测试
- **React Testing Library** - 组件测试
- **msw** - API Mock

## 测试类型

### 1. 单元测试 (Vitest)

```typescript
import { describe, it, expect, vi } from 'vitest';

describe('UserService', () => {
  it('should create user', async () => {
    const mockDb = {
      user: {
        create: vi.fn().mockResolvedValue({ id: 1, name: 'Test' })
      }
    };
    
    const result = await createUser(mockDb, { name: 'Test' });
    expect(result.name).toBe('Test');
  });
});
```

### 2. 组件测试 (React Testing Library)

```typescript
import { render, screen, fireEvent } from '@testing-library/react';
import { UserCard } from './UserCard';

it('should render user name', () => {
  render();
  expect(screen.getByText('John')).toBeInTheDocument();
});

it('should call onEdit when clicked', () => {
  const onEdit = vi.fn();
  render();
  
  fireEvent.click(screen.getByRole('button'));
  expect(onEdit).toHaveBeenCalled();
});
```

### 3. E2E 测试 (Playwright)

```typescript
import { test, expect } from '@playwright/test';

test('user login', async ({ page }) => {
  await page.goto('/login');
  await page.fill('[name="email"]', 'test@example.com');
  await page.fill('[name="password"]', 'password');
  await page.click('button[type="submit"]');
  
  await expect(page).toHaveURL('/dashboard');
});
```

### 4. API Mock (msw)

```typescript
import { http, HttpResponse } from 'msw';
import { setupServer } from 'msw/node';

const server = setupServer(
  http.get('/api/users', () => {
    return HttpResponse.json([
      { id: 1, name: 'John' }
    ]);
  })
);

beforeAll(() => server.listen());
afterEach(() => server.resetHandlers());
```

## 常用脚本

- `scripts/coverage-check.sh` - 覆盖率检查
- `scripts/generate-mocks.sh` - Mock 生成

## 参考文档

- `references/UNIT-TEST-GUIDE.md`
- `references/E2E-TEST-GUIDE.md`

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [awesome-ai-dev](https://github.com/awesome-ai-dev)
- **Source:** [awesome-ai-dev/awesome-ai-dev](https://github.com/awesome-ai-dev/awesome-ai-dev)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** yes
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-awesome-ai-dev-awesome-ai-dev-testing
- Seller: https://agentstack.voostack.com/s/awesome-ai-dev
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
