首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >断言由mocha.js运行的测试数量

断言由mocha.js运行的测试数量
EN

Stack Overflow用户
提问于 2021-11-01 15:19:28
回答 1查看 428关注 0票数 1

是否有一种方法可以断言mocha运行的测试数量?

例如,类似:

代码语言:javascript
复制
afterAllTests(() => {
  expect(mocha.numTestsRun).to.be.greaterThan(400);
});

我最近从mocha 7.1.2升级到9.1.3-R速记参数停止工作。我的测试套件从运行400次测试到只运行10次顶级测试。切换回--recursive解决了这个问题,但我想确保这样的事情不会再次发生。

我的package.json看起来是这样的:

代码语言:javascript
复制
{
  "scripts": {
    "integrationTest": "mocha --recursive spec test/integration",
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-02 07:12:51

与其计算到目前为止运行的测试数量,我还不如计算用Mocha声明的测试数量。这确保了对测试总数的检查仍然有效,而不管执行的顺序如何。

要计算测试的总数,我们需要递归地计算顶级套件及其所有子套件中声明的测试数量(没有快捷的AFAIK)。

我们首先声明一个新的测试(它可以放置在任何地方),唯一的目的是计算测试的总数。

在这个测试中,我们可以使用this.runnable().parent获得包含的套间。这个套件也有一个属性parent,可以用来获得下一个更高的包含套件,一直到顶层套件(由Mocha隐式定义)。顶层套件有一个属性root设置为true

现在,与任何其他套件一样,顶级套件具有属性testssuites,这些属性可以用于在所有子代套件中分支,并计算声明的测试总数。

代码语言:javascript
复制
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时不忘记包含它时才能工作。将测试逻辑移动到顶级beforeafter挂钩不会有太大变化,因为这些挂钩具有与在相同作用域中声明的测试相同的可见性。您可以将该测试放入spec文件夹中的一个文件中,因此即使没有--recursive标志,也将执行该测试。最后,您可以在环境变量中设置测试数量,并在Mocha之外检查该值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69799007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档