SuperAPI AI 工具集

ruling

测试与质量

查看项目

更新于 10-16 05:57

技能介绍

用途

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 桥接:

  1. 手动启动你的 Node.js 进程
  2. 设置 SONARJS_EXISTING_NODE_PROCESS_PORT=<port>
  3. 从 ruling 测试类中移除 @Execution(ExecutionMode.CONCURRENT)(以串行方式执行)

子模块设置

如果子模块尚未检出:

git submodule init
git submodule update

适用场景

  • 为 SonarJS 新增或修改规则时验证真实代码库行为
  • 需要将实际 ruling 输出同步为预期基准输出
  • 排查实际输出与预期输出之间的差异
  • 新规则在现有源码上无命中,需要补充自定义测试源码

限制与注意事项

警告:运行 ruling 测试会删除项目根目录下的 node_modules。运行后需执行 npm ci。

价格、收费、平台支持范围等其余信息暂未提供。