217 lines
5.0 KiB
Markdown
217 lines
5.0 KiB
Markdown
# @coze-arch/vitest-config
|
|
|
|
> Shared Vitest configuration for the Coze architecture ecosystem
|
|
|
|
A unified testing configuration package that provides optimized Vitest setups for Node.js and web applications in the Coze monorepo. This package simplifies test configuration management and ensures consistency across all projects.
|
|
|
|
## Features
|
|
|
|
- **Multiple Presets**: Pre-configured setups for `default`, `node`, and `web` environments
|
|
- **TypeScript Support**: Built-in TypeScript path mapping with `vite-tsconfig-paths`
|
|
- **React Testing**: Web preset includes React plugin for component testing
|
|
- **Coverage Reporting**: Comprehensive coverage configuration with multiple reporters
|
|
- **Performance Optimized**: Fork-based test execution with configurable pool options
|
|
- **Semi-UI Compatibility**: Special handling for Semi Design components
|
|
- **Flexible Configuration**: Easy to extend and customize for specific project needs
|
|
|
|
## Get Started
|
|
|
|
### Installation
|
|
|
|
Add the package to your project:
|
|
|
|
```bash
|
|
# In your package.json
|
|
{
|
|
"devDependencies": {
|
|
"@coze-arch/vitest-config": "workspace:*"
|
|
}
|
|
}
|
|
```
|
|
|
|
Then run:
|
|
|
|
```bash
|
|
rush update
|
|
```
|
|
|
|
### Basic Usage
|
|
|
|
Create a `vitest.config.ts` file in your project root:
|
|
|
|
```typescript
|
|
import { defineConfig } from '@coze-arch/vitest-config';
|
|
|
|
export default defineConfig({
|
|
dirname: __dirname,
|
|
preset: 'web', // or 'node' or 'default'
|
|
});
|
|
```
|
|
|
|
## API Reference
|
|
|
|
### `defineConfig(config, otherConfig?)`
|
|
|
|
The main configuration function that creates a Vitest configuration based on your requirements.
|
|
|
|
#### Parameters
|
|
|
|
**config** (`VitestConfig`):
|
|
- `dirname` (string, required): The project root directory (`__dirname`)
|
|
- `preset` (string, required): Configuration preset - `'default'` | `'node'` | `'web'`
|
|
- All other Vitest configuration options
|
|
|
|
**otherConfig** (`OtherConfig`, optional):
|
|
- `fixSemi` (boolean): Enable Semi Design component compatibility fixes
|
|
|
|
#### Examples
|
|
|
|
**Default Configuration:**
|
|
```typescript
|
|
import { defineConfig } from '@coze-arch/vitest-config';
|
|
|
|
export default defineConfig({
|
|
dirname: __dirname,
|
|
preset: 'default',
|
|
});
|
|
```
|
|
|
|
**Node.js Application:**
|
|
```typescript
|
|
import { defineConfig } from '@coze-arch/vitest-config';
|
|
|
|
export default defineConfig({
|
|
dirname: __dirname,
|
|
preset: 'node',
|
|
test: {
|
|
include: ['src/**/*.test.ts'],
|
|
exclude: ['src/**/*.browser.test.ts'],
|
|
},
|
|
});
|
|
```
|
|
|
|
**React/Web Application:**
|
|
```typescript
|
|
import { defineConfig } from '@coze-arch/vitest-config';
|
|
|
|
export default defineConfig({
|
|
dirname: __dirname,
|
|
preset: 'web',
|
|
test: {
|
|
include: ['src/**/*.{test,spec}.{ts,tsx}'],
|
|
setupFiles: ['./src/test-setup.ts'],
|
|
},
|
|
});
|
|
```
|
|
|
|
**With Semi Design Components:**
|
|
```typescript
|
|
import { defineConfig } from '@coze-arch/vitest-config';
|
|
|
|
export default defineConfig({
|
|
dirname: __dirname,
|
|
preset: 'web',
|
|
}, {
|
|
fixSemi: true,
|
|
});
|
|
```
|
|
|
|
**Custom Coverage Configuration:**
|
|
```typescript
|
|
import { defineConfig } from '@coze-arch/vitest-config';
|
|
|
|
export default defineConfig({
|
|
dirname: __dirname,
|
|
preset: 'web',
|
|
test: {
|
|
coverage: {
|
|
all: true,
|
|
threshold: {
|
|
global: {
|
|
branches: 80,
|
|
functions: 80,
|
|
lines: 80,
|
|
statements: 80,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
```
|
|
|
|
### Available Presets
|
|
|
|
#### `default`
|
|
- Basic Vitest configuration
|
|
- TypeScript path mapping
|
|
- Fork-based test execution
|
|
- Coverage reporting disabled by default
|
|
|
|
#### `node`
|
|
- Extends default preset
|
|
- Optimized for Node.js applications
|
|
- No browser-specific plugins
|
|
|
|
#### `web`
|
|
- Extends default preset
|
|
- Includes React plugin for JSX/TSX support
|
|
- Uses `happy-dom` environment for DOM testing
|
|
- Optimized for frontend applications
|
|
|
|
### Built-in Features
|
|
|
|
**Test Execution:**
|
|
- Pool: `forks` with 1-32 workers
|
|
- Parallel hook execution
|
|
- Global test APIs enabled
|
|
- Silent mode in CI environments
|
|
|
|
**Coverage:**
|
|
- Provider: V8
|
|
- Formats: Cobertura, Text, HTML, Clover, JSON
|
|
- Includes: `src/**/*.ts`, `src/**/*.tsx`
|
|
- Excludes: Standard Vitest defaults
|
|
|
|
**TypeScript:**
|
|
- Automatic path mapping via `vite-tsconfig-paths`
|
|
- Resolve main fields: `main`, `module`, `exports`
|
|
|
|
## Development
|
|
|
|
### Scripts
|
|
|
|
```bash
|
|
# Lint the code
|
|
rush lint
|
|
|
|
# Development mode
|
|
rush dev
|
|
```
|
|
|
|
### Project Structure
|
|
|
|
```
|
|
src/
|
|
├── index.js # CommonJS entry point with Sucrase
|
|
├── define-config.ts # Main configuration function
|
|
├── preset-default.ts # Base configuration preset
|
|
├── preset-node.ts # Node.js specific preset
|
|
├── preset-web.ts # Web/React specific preset
|
|
└── tsc-only.ts # TypeScript-only mock file
|
|
```
|
|
|
|
## Dependencies
|
|
|
|
### Production Dependencies
|
|
- `vite-tsconfig-paths`: TypeScript path mapping support
|
|
|
|
### Development Dependencies
|
|
- `vitest`: Core testing framework
|
|
- `@vitejs/plugin-react`: React support for web preset
|
|
- `@vitest/coverage-v8`: Coverage reporting
|
|
- `happy-dom`: Lightweight DOM environment
|
|
- `sucrase`: Fast TypeScript compilation
|
|
|
|
## License
|
|
|
|
This package is part of the Coze architecture ecosystem and follows the project's licensing terms. |