mocha.js 断言测试次数 运行
Assert number of tests run by mocha.js
有没有办法断言 mocha 运行 的测试数量?
例如。类似于:
afterAllTests(() => {
expect(mocha.numTestsRun).to.be.greaterThan(400);
});
我最近从 mocha
7.1.2
升级到 9.1.3
并且 -R
shorthand 参数停止工作。我的测试套件从 运行ning ~400 个测试变成了 运行ning ~10 个顶级测试。
切换回 --recursive
解决了这个问题,但我想确保这样的事情不会再发生。
我的 package.json
看起来像这样:
{
"scripts": {
"integrationTest": "mocha --recursive spec test/integration",
}
}
我不会计算到目前为止已经 运行 的测试数量,而是计算已经用 Mocha 声明的测试数量。这确保了对测试总数的检查在任何情况下都保持有效
执行顺序。
要计算测试总数,我们需要递归地计算在顶级套件及其所有子套件中声明的测试数(没有捷径 AFAIK)。
我们首先声明一个新的测试(它可以放在任何地方),其唯一目的是计算测试总数。
在此test, we can get the containing suite与this.runnable().parent
。该套件本身也有一个 属性 parent
可用于获取下一个更高的包含套件,一直到顶级套件(由 Mocha 隐式定义)。顶级套件的 属性 root
设置为 true
.
现在,顶级套件与任何其他套件一样,具有属性 tests
和 suites
,可用于通过所有后代套件分支并计算声明的测试总数。
it('total number of tests should be > 400', function() { // Use `function()`, don't use `() =>`...
let suite0 = this.runnable().parent; // ...because we need to access `this`.
while (!suite0.root) suite0 = suite0.parent;
// suite0 is now the top-level suite
// Recursiveliy count the number of tests in each suite
const countTests = (cnt, suite) => suite.suites.reduce(countTests, cnt + suite.tests.length);
const totalTests = countTests(0, suite0);
expect(totalTests).to.be.greaterThan(400);
});
这将计算所有测试,包括标记为 skip
ped 的测试(但我想这就是您想要的)。
另请注意 - 显然 - test-counting-test 本身只有在您 运行 Mocha 时没有忘记包含它时才会起作用。将测试逻辑移动到顶级 before
或 after
挂钩不会有太大变化,因为这些挂钩与在同一范围内声明的测试具有相同的可见性。您可以将该测试放在 spec
文件夹内的文件中,因此即使没有 --recursive
标志也会执行它。作为最后的手段,您可以在环境变量中设置测试数量并在 Mocha 之外检查该值。
有没有办法断言 mocha 运行 的测试数量?
例如。类似于:
afterAllTests(() => {
expect(mocha.numTestsRun).to.be.greaterThan(400);
});
我最近从 mocha
7.1.2
升级到 9.1.3
并且 -R
shorthand 参数停止工作。我的测试套件从 运行ning ~400 个测试变成了 运行ning ~10 个顶级测试。
切换回 --recursive
解决了这个问题,但我想确保这样的事情不会再发生。
我的 package.json
看起来像这样:
{
"scripts": {
"integrationTest": "mocha --recursive spec test/integration",
}
}
我不会计算到目前为止已经 运行 的测试数量,而是计算已经用 Mocha 声明的测试数量。这确保了对测试总数的检查在任何情况下都保持有效 执行顺序。
要计算测试总数,我们需要递归地计算在顶级套件及其所有子套件中声明的测试数(没有捷径 AFAIK)。
我们首先声明一个新的测试(它可以放在任何地方),其唯一目的是计算测试总数。
在此test, we can get the containing suite与this.runnable().parent
。该套件本身也有一个 属性 parent
可用于获取下一个更高的包含套件,一直到顶级套件(由 Mocha 隐式定义)。顶级套件的 属性 root
设置为 true
.
现在,顶级套件与任何其他套件一样,具有属性 tests
和 suites
,可用于通过所有后代套件分支并计算声明的测试总数。
it('total number of tests should be > 400', function() { // Use `function()`, don't use `() =>`...
let suite0 = this.runnable().parent; // ...because we need to access `this`.
while (!suite0.root) suite0 = suite0.parent;
// suite0 is now the top-level suite
// Recursiveliy count the number of tests in each suite
const countTests = (cnt, suite) => suite.suites.reduce(countTests, cnt + suite.tests.length);
const totalTests = countTests(0, suite0);
expect(totalTests).to.be.greaterThan(400);
});
这将计算所有测试,包括标记为 skip
ped 的测试(但我想这就是您想要的)。
另请注意 - 显然 - test-counting-test 本身只有在您 运行 Mocha 时没有忘记包含它时才会起作用。将测试逻辑移动到顶级 before
或 after
挂钩不会有太大变化,因为这些挂钩与在同一范围内声明的测试具有相同的可见性。您可以将该测试放在 spec
文件夹内的文件中,因此即使没有 --recursive
标志也会执行它。作为最后的手段,您可以在环境变量中设置测试数量并在 Mocha 之外检查该值。