简介
@stryker-mutator/api 是一个用于 JavaScript 测试的自动化测试工具,使用了 mutation testing 技术,可以在代码变异后运行测试并提供测试覆盖率的报告。
安装
可以通过 npm 安装该包:
npm install @stryker-mutator/api
使用
创建 Stryker 实例
首先需要创建 Stryker 实例,并传入配置项:
const Stryker = require('@stryker-mutator/api').default; const stryker = new Stryker({ // 配置项 });
配置项
Stryker 的配置项非常丰富,包括但不限于以下内容:
files
: 需要进行变异测试的代码文件路径mutator
: 变异器,可以选择预先定义的或自己实现的transpilers
: 用于将代码转换成浏览器或 Node.js 可执行的代码,可以选择预先定义的或自己实现的reporters
: 报告器,用于生成测试过程和结果的报表,可以选择预先定义的或自己实现的testFramework
: 测试框架,可以选择 Mocha、Jest 等coverageAnalysis
: 使用哪种方式计算测试覆盖率,可以选择all
或perTest
具体的配置项可以参考 Stryker 官方文档。
运行
配置项设置完毕后,就可以运行 Stryker 实例了:
stryker.runMutationTest().then((result) => { // 此处可以处理测试结果 });
测试结果以 Promise 的形式返回,结果包含测试过程中产生的信息和各项指标分析,可以根据需要进行处理。
示例
以下是一个变异测试的示例代码:
// src/index.js export function sum(a, b) { return a + b; } export function diff(a, b) { return a - b; }
-- -------------------- ---- ------- -- ------------------ ------ - ---- ---- - ---- ------------------ --------------- -- -- - ------ - - - ---- --- -- -- - ------------- ------------ --- --- ---------------- -- -- - ------ - - - ---- --- -- -- - -------------- ------------ --- ---
以上代码中,src/index.js
实现了两个函数 sum
和 diff
,test/index.spec.js
对这两个函数进行了测试。我们可以对 src/index.js
进行变异,添加或修改部分代码,然后使用 Stryker 进行变异测试。
-- -------------------- ---- ------- -- -------- ----- ------- - ---------------------------------------- -- -- ------- -- ----- ------- - --- --------- ------ ------------ ------------- -------- - ----- ------------- ------------------ ----------------------- ---------------- -- -------------- -------- ----------------- ------ ---------- ------------ ------------- -------- --- -- ------ --------------------------------------- -- - -- ------ -------------------- ---
以上代码使用了 Stryker 的默认配置,其中 mutator 选择的是 JavaScript 变异器,在排除了两种变异点之后,使用 Mocha 作为测试框架进行测试,测试覆盖率使用 all 模式,同时生成 progress、clear-text 和 html 三种类型的报告。运行结果如下:
-- -------------------- ---- ------- ---- ------- --- ------ ------ ----- - -------- ----- ------- ---------- - ----- -------- - ------- ----- ----- ---- -- ------ ------ ---- -------- --------- ---- -------- -------- - ---------- -------- - -------- -------- - ------ -------- ----- ------- ---------- - ----- ------- ------- - ----- ------- --------- - ----- ----- - ------ -------- - --------- -------- - ----- --- ------ - -- -------- ----------- --- -------- - ------ ---- ------ ------- --- -------------------------------- ------ ---- -------- ----- -- -----
上述测试结果表明变异测试通过,mutation score 为 100%,即所有变异点都被测到了。其中 reports/mutation/html/index.html 为 html 报告的路径,可以打开该文件进行查看。
总结
@stryker-mutator/api 是一个非常实用的 JavaScript 变异测试工具,它可以将程序中的语句变异为其他语句、表达式变异为其他表达式等,并据此运行测试代码来确认程序是否具有可靠性和健壮性。本文主要介绍了如何使用 @stryker-mutator/api 进行变异测试,包括创建 Stryker 实例、配置参数、运行测试实例等。希望本文对初学者有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/181596