如何通过单个ng test命令一次性运行Angular应用及所有库的Jest测试?
一次性运行所有Angular应用与库测试的解决方案
嘿,我完全懂你面对18个库要挨个执行测试的痛苦——手动输入命令或者写顺序脚本都太耗时间了!其实不用这么麻烦,咱们可以通过几种方式实现用单个命令一次性跑完全部测试,甚至还能并行执行来节省时间:
方法1:用npm脚本批量(并行)执行
如果你想大幅缩短总耗时,推荐用concurrently工具并行运行所有测试:
- 先安装依赖:
npm install --save-dev concurrently
- 在
package.json的scripts里添加自定义命令。如果你的库都是以lib开头命名(比如lib1、lib2...),直接把所有测试命令列进去就行(记得加--watch=false避免卡在监听模式):
"scripts": { "test:all": "concurrently \"ng test --watch=false\" \"ng test lib1 --watch=false\" \"ng test lib2 --watch=false\" ... \"ng test lib18 --watch=false\"" }
- 执行时只需跑:
npm run test:all
要是担心测试日志混在一起,可以给每个测试命令指定单独的输出目录,比如:
"test:all": "concurrently \"ng test --watch=false --output-path=coverage/app\" \"ng test lib1 --watch=false --output-path=coverage/lib1\" ..."
方法2:用脚本自动遍历所有库(适合库数量多的情况)
18个库手动列命令太麻烦?写个简单脚本就能自动遍历所有库项目:
针对Linux/macOS的Shell脚本
- 在项目根目录创建
run-all-tests.sh文件,内容如下:
#!/bin/bash # 先运行应用的测试 echo "Running application tests..." ng test --watch=false # 遍历所有以lib开头的库项目并执行测试 echo "Running library tests..." for project in $(ng config projects | grep -E "^lib" | cut -d: -f1); do echo "Testing $project..." ng test $project --watch=false done
- 给脚本添加执行权限:
chmod +x run-all-tests.sh
- 执行脚本:
./run-all-tests.sh
针对Windows的批处理脚本
创建run-all-tests.bat文件,内容如下:
@echo off echo Running application tests... ng test --watch=false echo Running library tests... for /f "tokens=1 delims=:" %%p in ('ng config projects ^| findstr /r "^lib"') do ( echo Testing %%p... ng test %%p --watch=false )
双击运行这个批处理文件即可。
小提示
- 如果需要生成覆盖率报告,给每个
ng test命令加上--code-coverage参数,每个项目的覆盖率结果会自动保存到对应目录。 - 并行执行时若遇到端口冲突(默认ng test用9876端口),可以给每个库的测试指定不同端口,比如
ng test lib1 --watch=false --port=9877。
内容的提问来源于stack exchange,提问作者ed-tester
相关产品推荐
相关产品推荐

