feat: manually mirror opencoze's code from bytedance
Change-Id: I09a73aadda978ad9511264a756b2ce51f5761adf
This commit is contained in:
217
frontend/config/vitest-config/README.md
Normal file
217
frontend/config/vitest-config/README.md
Normal file
@@ -0,0 +1,217 @@
|
||||
# @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.
|
||||
Reference in New Issue
Block a user