用途
Ruling 测试会分析大型第三方代码库(JS/TS 和 CSS),并将产生的问题与预期输出进行比对。在为 SonarJS 新增或修改规则时运行它们,可用于验证规则在真实世界代码中的表现。
主要能力
- 运行 ruling 集成测试(JS/TS 与 CSS)
- 将实际输出同步为预期输出(需先审查输出)
- 调试实际与预期之间的差异
- 为新规则补充自定义测试源码
- 通过 Node 进程调试 ruling 过程中的 Node.js 桥接
使用方式
运行 Ruling
前置条件:初始化子模块、安装依赖、构建 JS/TS,然后重新构建 jar。
git submodule update --init --recursive
npm install
npm run bbf
mvn install -DskipTests
运行 ruling(JS/TS 与 CSS):
npm run ruling
同步实际 → 预期(审查输出之后):
npm run ruling-sync
调试差异:
sh tools/ruling-debug-script.sh
结果位置:
- 实际结果:
packages/ruling/actual/ - 预期结果:
its/ruling/src/test/expected/
Java Ruling(旧方式)
cd its/ruling
mvn verify -Dtest=RulingTest -Dmaven.test.redirectTestOutputToFile=false
将实际结果复制到预期结果:
cp -R target/actual/ src/test/expected/
审查 diff:
diff -rq src/test/expected target/actual
为新规则添加自定义源码
如果新规则在现有源码上不产生任何问题,可添加测试代码:
its/sources/custom/jsts/S1234.js— 常规代码its/sources/custom/jsts/tests/S1234.js— 测试代码
可从 RSPEC HTML 描述(符合/不符合示例)中复制。
使用 Node 进程调试
在 ruling 过程中调试 Node.js 桥接:
- 手动启动你的 Node.js 进程
- 设置
SONARJS_EXISTING_NODE_PROCESS_PORT=<port> - 从 ruling 测试类中移除
@Execution(ExecutionMode.CONCURRENT)(以串行方式执行)
子模块设置
如果子模块尚未检出:
git submodule init
git submodule update
适用场景
- 为 SonarJS 新增或修改规则时验证真实代码库行为
- 需要将实际 ruling 输出同步为预期基准输出
- 排查实际输出与预期输出之间的差异
- 新规则在现有源码上无命中,需要补充自定义测试源码
限制与注意事项
警告:运行 ruling 测试会删除项目根目录下的 node_modules。运行后需执行 npm ci。
价格、收费、平台支持范围等其余信息暂未提供。