wot-design-uni/scripts/test-component.ts
不如摸鱼去 7e84c5c91f
feat: 引入vitest做组件测试
* chore: 🚀 引入vitest做组件测试

* chore: 🚀 引入vitest做组件测试

* chore: 🚀 update workflow

* chore: 🚀 update workflow

* chore: 🚀 update workflow

* chore: 🚀 update workflow

* chore: 🚀 update nodejs version

* chore: 🚀 update nodejs version
2025-05-06 13:38:08 +08:00

122 lines
2.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env node
/**
* 组件测试脚本 (仅 H5 平台)
* 用法:
* - 测试单个组件pnpm test:component wd-button
* - 测试多个组件pnpm test:component wd-button wd-input
* - 生成覆盖率报告pnpm test:component wd-button --coverage
*/
import { execSync } from 'child_process'
import fs from 'fs'
import path from 'path'
// 定义类型
type TestOptions = {
components: string[]
coverage: boolean
}
/**
* 解析命令行参数
* @returns 解析后的测试选项
*/
function parseArgs(): TestOptions {
const args = process.argv.slice(2)
const components: string[] = []
let coverage = false
// 解析参数
args.forEach((arg) => {
if (arg === '--coverage') {
coverage = true
} else {
components.push(arg)
}
})
return { components, coverage }
}
/**
* 显示帮助信息
*/
function showHelp(): void {
console.log(`
组件测试脚本 (仅 H5 平台)
用法:
- 测试单个组件pnpm test:component wd-button
- 测试多个组件pnpm test:component wd-button wd-input
- 生成覆盖率报告pnpm test:component wd-button --coverage
`)
}
/**
* 检查组件测试文件是否存在
* @param components 组件列表
* @returns 是否所有组件测试文件都存在
*/
function checkTestFilesExist(components: string[]): boolean {
for (const component of components) {
const testFile = path.join(__dirname, '..', 'tests', 'components', `${component}.test.ts`)
if (!fs.existsSync(testFile)) {
console.error(`错误:找不到组件 ${component} 的测试文件:${testFile}`)
return false
}
}
return true
}
/**
* 运行组件测试
* @param options 测试选项
*/
function runComponentTests(options: TestOptions): void {
const { components, coverage } = options
// 构建测试命令
const testFiles = components.map((component) => `tests/components/${component}.test.ts`).join(' ')
const coverageFlag = coverage ? '--coverage' : ''
const command = `cross-env UNI_PLATFORM=h5 COMPONENT_TEST=true vitest run ${testFiles} ${coverageFlag}`
console.log(`正在运行测试 (H5 平台)${command}`)
try {
// 执行测试命令
execSync(command, { stdio: 'inherit' })
console.log('测试完成!')
} catch (error) {
if (error instanceof Error) {
console.error('测试失败!', error.message)
} else {
console.error('测试失败!', error)
}
process.exit(1)
}
}
/**
* 主函数
*/
function main(): void {
const options = parseArgs()
// 如果没有指定组件,显示帮助信息
if (options.components.length === 0) {
showHelp()
process.exit(0)
}
// 检查组件测试文件是否存在
if (!checkTestFilesExist(options.components)) {
process.exit(1)
}
// 运行组件测试
runComponentTests(options)
}
// 执行主函数
main()