本文目录导读:

- 使用 npm scripts(最常用)
- 使用 Makefile
- 使用 Husky + lint-staged(Git hooks)
- 脚本自动运行(Python 示例)
- Shell 脚本自动化
- CI/CD 配置示例
- 自动运行脚本(Node.js)
- 使用建议
使用 npm scripts(最常用)
在 package.json 中配置:
{
"scripts": {
"test": "jest",
"test:watch": "jest --watch",
"test:coverage": "jest --coverage",
"test:ci": "jest --ci --coverage --maxWorkers=2"
}
}
运行:
npm test # 运行一次 npm run test:watch # 持续监听文件变化 npm run test:ci # CI环境运行
使用 Makefile
.PHONY: test test-watch test-coverage
test:
npm test
test-watch:
npx jest --watch
test-coverage:
npx jest --coverage
test-all:
npm test
npm run lint
# 在提交前自动运行
pre-commit: test
@echo "所有测试通过 ✓"
使用:
make test make test-watch
使用 Husky + lint-staged(Git hooks)
安装配置:
npm install husky lint-staged --save-dev
package.json 配置:
{
"husky": {
"hooks": {
"pre-commit": "lint-staged",
"pre-push": "npm test"
}
},
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"eslint --fix",
"jest --findRelatedTests --bail"
]
}
}
脚本自动运行(Python 示例)
run_tests.py:
#!/usr/bin/env python3
import subprocess
import sys
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class TestRunner(FileSystemEventHandler):
def on_modified(self, event):
if event.src_path.endswith('.py') or event.src_path.endswith('.test.js'):
print(f"\n检测到文件变化: {event.src_path}")
self.run_tests()
def run_tests(self):
print("运行测试...")
result = subprocess.run(['npm', 'test'], capture_output=True, text=True)
print(result.stdout)
if result.returncode != 0:
print("❌ 测试失败!")
else:
print("✅ 测试通过!")
if __name__ == "__main__":
event_handler = TestRunner()
observer = Observer()
observer.schedule(event_handler, path='./src', recursive=True)
observer.start()
print("开始监控文件变化...")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
Shell 脚本自动化
auto_test.sh:
#!/bin/bash
# 配置
WATCH_DIR="./src"
TEST_COMMAND="npm test"
# 颜色输出
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'
# 运行测试
run_tests() {
echo -e "${GREEN}运行测试...${NC}"
if $TEST_COMMAND; then
echo -e "${GREEN}✅ 测试通过${NC}"
else
echo -e "${RED}❌ 测试失败${NC}"
fi
}
# 监听文件变化(需要安装 inotify-tools)
if command -v inotifywait &> /dev/null; then
echo "开始监听 $WATCH_DIR ..."
while inotifywait -r -e modify $WATCH_DIR; do
run_tests
done
else
echo "使用轮询模式..."
while true; do
run_tests
sleep 60 # 每60秒运行一次
done
fi
CI/CD 配置示例
GitHub Actions
# .github/workflows/test.yml
name: Run Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
env:
CI: true
Jenkins Pipeline
// Jenkinsfile
pipeline {
agent any
stages {
stage('Install') {
steps {
sh 'npm install'
}
}
stage('Test') {
steps {
sh 'npm test'
}
}
}
post {
always {
junit 'reports/**/*.xml'
}
}
}
自动运行脚本(Node.js)
auto-runner.js:
const chokidar = require('chokidar');
const { exec } = require('child_process');
const watcher = chokidar.watch('./src/**/*.{js,jsx,ts,tsx}', {
ignored: /node_modules/,
persistent: true
});
let testTimeout;
watcher.on('change', (path) => {
console.log(`文件变化: ${path}`);
// 防抖,避免频繁触发
clearTimeout(testTimeout);
testTimeout = setTimeout(() => {
console.log('运行测试...');
exec('npm test', (err, stdout, stderr) => {
if (err) {
console.error('测试失败:', stderr);
} else {
console.log('测试通过:', stdout);
}
});
}, 1000);
});
console.log('开始监控...');
启动方式:
node auto-runner.js
使用建议
- 开发环境:使用
jest --watch实时反馈 - 提交前:使用 Husky + lint-staged 自动运行
- CI环境:配置完整的测试流水线
- 定时任务:配置 cron job 定期运行
这样可以根据不同场景选择合适的自动化方案!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播