赛沙特
塞沙特是古埃及写作,智慧,和知识的女神. 作为文人和记录保持者,她被确认为测量,会计,建筑,科学,天文学,数学,几何,历史和测量的女神.
TypeScript和TSX的本土代码保证工具,用Rust写成. 赛沙特 合并函数级别 《中美洲行动计划》 分析 操作员突变测试 寻找复杂和(或) 密码测试不足.
赛沙特做什么
- 计算函数复杂度和CRAP从分支覆盖中得分.
- 变化比较、逻辑、算术、布尔、可选和无效 一次一个表达式,并检查测试是否检测到它们.
- 替换函数机构以查找删除测试失败的覆盖函数.
- 删除表达式语句并删除符合条件的函数的返回 .
- 以被俘项目的单独副本进行测试.
- 出产可读终端输出并版本为JSON,带有可选的CI阈值.
- 支持明确源选择,多测试设置和平行突变工人.
- 选择经过验证的Vitest,Jest/Expo和节点设置的完整测试文件,并带有全跑倒计时和选择退出.
安装
npm install --save-dev @binary-balance/seshat
Seshat需要节点 >=24.20.0 <25npm 为 Linux 安装一个预建的二进制
x64/ARM64 (glibc), macOS x64/ARM64 或 Windows x64, 因此Rust是不需要的.
使用 musl 而不是 glibc 的 Alpine Linux 不支持 。 见
平台支持矩阵 详细情况.
评估的项目必须已经安装了自己的附属设施, 包括TypeScript,它的测试跑道和覆盖工具.
支持的测试跑道
| 运行者 | 支持的版本 |
|---|---|
| 节点的内置测试跑道 | 节点 >=24.20.0 <25 |
| 维特 | >=5.0.0 <6 |
| 欢乐 | 节点或jsdom环境 29.7.0 |
| 以博览会为乐 | 欢乐 29.7.0 带着欢快的表演 57.0.5 或者说 57.0.6 |
Seshat检查每跑一次的跑步版本 如果不是,就停下来 已支持。 见 运行相容性引导。 。 。 .
配置
添加一个 seshat.json 到项目根。 这个是用来测试节点的
运行 :
{
"source": {
"include": ["src/**/*.ts"]
},
"capture": [
"package.json", "package-lock.json", "tsconfig.json", "collect-node.mjs",
"src", "tests", "node_modules"
],
"setups": [{
"name": "node",
"runner": "node",
"cwd": ".",
"typecheck": ["node", "node_modules/typescript/bin/tsc", "--project", "tsconfig.json"],
"test": [
"node", "--test", "--test-concurrency=1",
"--test-reporter={seshatReporter}", "tests/rules.test.mjs"
],
"coverage": {
"command": ["node", "collect-node.mjs", "tests/rules.test.mjs"],
"report": "coverage/coverage-final.json"
}
}]
}
source选择要评估的文件,使用 glob 模式.capture列出复制到每个孤立运行的文件和目录。 这个 必须包含选定的源和命令所需的一切.setups给出类型检查、测试和覆盖命令。 覆盖范围 命令必须写出伊斯坦布尔JSON报告;collect-node.mjs是一个小 从 节点示例。 。 。 .
这个 实例 包括完整的节点,npm工作空间,Vitest,
plain Jest和Jest/Expo项目。 这个 配置指南 覆盖
每个领域,包括 workers 用于平行突变运行.
比较、逻辑、算术、布尔语、语句和可选变种
默认启用。 设定
"mutationOperators": ["comparison"] 将操作范围保留为0.4.0.
使用 ["comparison", "logical", "arithmetic"] 保留0.5.0的范围
0.6.0 数字 boolean 家庭翻转运行时间 true编号 :false 字节并删除
前缀 !,包括其布尔转换。 这个 optional 家庭删除一个
?.
线段或更改 ?? 改为 ||关闭 optional 从 mutationOperators 改为
保留0.8.x范围。 见 准确的形式和限度。 。 。 .
更广泛的默认可以增加测试处决和变化分数.
使用
npx @binary-balance/seshat check # CRAP and mutation testing
npx @binary-balance/seshat crap # coverage and CRAP only
npx @binary-balance/seshat mutate # mutation testing only
使用完整的软件包名称 npx。一个赤裸的 npx seshat 可以获取
与这个名字无关的软件包.
每个命令读取 ./seshat.json; 使用 --config PATH 为另一个文件。 添加
--json 如本报告所述,将撰写报告
报告格式。 。 。 . --help 列出所有选项.
只运行信任的测试命令 。 Seshat的拷贝保护项目检查, 但测试仍然可以访问外部文件,服务,数据库和证书.
了解结果
CRAP使用复杂性和分支覆盖,从0到1的分数. 职能 没有记录分支使用语句覆盖:
complexity^2 * (1 - coverage)^3 + complexity
对于复杂性 10,零覆盖 110,50%的覆盖率 22.5 财务报告和审定财务报表
全覆盖 10。 。 。 .
语句覆盖计算运行代码; 分支覆盖计算记录
决定的结果。 例如,测试中只有成员价格
if (member) total *= 0.9; return total; 可以在运行每个语句时运行
不测试非会员的结果。 其声明覆盖率为100%,
但是它的分支覆盖率是50%。 两种测量方法都出现在报告中.
变异分数是使测试失败的变异者的百分比. 一个变种人
故意修改代码,比如 > 改为 >= 或者说 true 改为 false。 。 。 .
如果测试抓到两个
三个变种人,得分是 66.67%。超时或执行错误会离开运行
不完整并扣分。 两分都证明正确.
check 财务报告和审定财务报表 mutate 还替换符合条件的职能机构,以检测伪测试
函数,那些尽管覆盖范围为正,但身体替换测试失败的人.
这些旗帜和计数与操作员的变异分数分开. mutate
收集新覆盖以跳过未执行的函数; 它不应用 CRAP
阈值。 极端突变甚至使用实验切换来取代.
用于 CI
添加可选阈值到 seshat.json数字 :
"thresholds": {
"maxCrap": 30,
"minMutationScore": 80,
"maxInferredAny": 10,
"maxTypeEscapes": 0
}
| 退出状态 | 含义 |
|---|---|
0 | 完成运行,达到阈值. |
1 | 完全运行时未达到阈值 . |
2 | 输入无效, 基线失败或运行不完整 . |
130 编号 : 143 | 由 SIGINT 编号 : SIGTERM 在乌尼克斯. |
maxInferredAny 将任意类型的运行时表达式站点分别限制
设置. maxTypeEscapes 明确限制 any 和类型脚本压制
整个选定来源的注释。 两者都适用于所有三个命令.
见 质量阈值 全文 规则.
发展
许可证
麻省理工学院。 。 。 .