是否有一种方法可以断言mocha运行的测试数量?
例如,类似:
afterAllTests(() => {
expect(mocha.numTestsRun).to.be.greaterThan(400);
});我最近从mocha 7.1.2升级到9.1.3,-R速记参数停止工作。我的测试套件从运行400次测试到只运行10次顶级测试。切换回--recursive解决了这个问题,但我想确保这样的事情不会再次发生。
我的package.json看起来是这样的:
{
"scripts": {
"integrationTest": "mocha --recursive spec test/integration",
}
}发布于 2021-11-02 07:12:51
与其计算到目前为止运行的测试数量,我还不如计算用Mocha声明的测试数量。这确保了对测试总数的检查仍然有效,而不管执行的顺序如何。
要计算测试的总数,我们需要递归地计算顶级套件及其所有子套件中声明的测试数量(没有快捷的AFAIK)。
我们首先声明一个新的测试(它可以放置在任何地方),唯一的目的是计算测试的总数。
在这个测试中,我们可以使用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);
});这将包括所有测试,包括标记为skipped的测试(但我认为这正是您想要的)。
还请注意--很明显--测试本身只有在运行Mocha时不忘记包含它时才能工作。将测试逻辑移动到顶级before或after挂钩不会有太大变化,因为这些挂钩具有与在相同作用域中声明的测试相同的可见性。您可以将该测试放入spec文件夹中的一个文件中,因此即使没有--recursive标志,也将执行该测试。最后,您可以在环境变量中设置测试数量,并在Mocha之外检查该值。
https://stackoverflow.com/questions/69799007
复制相似问题