Node.js 摩卡咖啡的开赛也同样如此

Node.js 摩卡咖啡的开赛也同样如此,node.js,mocha.js,Node.js,Mocha.js,我希望能够让我在摩卡的所有描述同时开始。有人能帮我弄清楚怎么做吗?摩卡咖啡不支持你开箱即用的做法。它按顺序运行测试。在处理未处理的异常时,这有一个很大的优势:Mocha可以确保它发生在当前正在运行的测试中。因此,它将异常归因于当前测试。当然,支持并行测试是可能的,但这会使摩卡咖啡变得复杂一些 我倾向于同意。我不会这么做。在摩卡咖啡通常运作的水平上,平行性在我看来并不特别可取。我以前使用测试并行性的地方是在运行端到端套件的级别。例如,在Windows 8.1中针对Firefox运行一个套件,同时在

我希望能够让我在摩卡的所有描述同时开始。有人能帮我弄清楚怎么做吗?

摩卡咖啡不支持你开箱即用的做法。它按顺序运行测试。在处理未处理的异常时,这有一个很大的优势:Mocha可以确保它发生在当前正在运行的测试中。因此,它将异常归因于当前测试。当然,支持并行测试是可能的,但这会使摩卡咖啡变得复杂一些


我倾向于同意。我不会这么做。在摩卡咖啡通常运作的水平上,平行性在我看来并不特别可取。我以前使用测试并行性的地方是在运行端到端套件的级别。例如,在Windows 8.1中针对Firefox运行一个套件,同时在Linux中针对Chrome运行同一套件。

您不能直接使用mocha执行此操作,因为它会创建it()回调列表并按顺序调用它们。 如果您愿意将描述移动到单独的.js文件中,可以这样做。要说服自己,请将其安装到某个地方,并使用short--slow命令调用它,以便它每次都报告:

laptop:/tmp/delme$ npm install mocha-parallel-tests
laptop:/tmp/delme$ cd node_modules/mocha-parallel-tests
laptop:/tmp/delme/node_modules/mocha-parallel-tests$ ./bin/mocha-parallel-tests test/parallel/tests --timeout 10000 --slow 100
您将看到,它在最长的运行时间内运行了三个(非常简单的)测试套件

如果您的测试不依赖于早期测试的副作用,那么您可以使它们都是异步的。 做这件事的一个简单方法是,在开始描述之前先开始做一些事情,然后使用常规的摩卡咖啡仪器来评估。在这里,我创建了一系列承诺,这些承诺需要一段时间才能解决,然后再次迭代测试,在.then()函数中检查测试结果:

var expect=require(“chai”).expect;
变量SlowTests=[
{姓名:“a”,时间:250},
{姓名:“b”,时间:500},
{姓名:“c”,时间:750},
{姓名:“d”,时间:1000},
{姓名:“e”,时间:1250},
{姓名:“f”,时间:1500}
];
速度测试forEach(功能(测试){
test.promise=需要一段时间(test.time);
});
描述(“慢测试”,函数(){
//摩卡咖啡默认为2s超时。更改为5s,带有:this.timeout(5000);
速度测试forEach(功能(测试){
它在大约“+test.time+”毫秒内(“应该通过”+test.name+”,
功能(完成){
test.promise.then(函数(res){
期望(res.to.be.equal)(测试时间);
完成();
}).catch(函数(err){
完成(错误);
});
});
});
});
功能需要一段时间(时间){
返回新承诺(功能(解决、拒绝){
setTimeout(函数(){
解决(时间);
},时间);
});

}
如果您使用karma启动测试,您可以使用在多个浏览器实例中拆分测试。它在不同的浏览器实例中并行运行Spec,非常简单且易于安装:

npm i karma-parallel
然后将“parallel”添加到karma.conf.js中的框架列表中

module.exports = function(config) {
  config.set({
    frameworks: ['parallel', 'mocha']
  });
};


披露:我是作者

你为什么要这么做?竞态条件将大量存在,因为每个/
之前
/
之后
/
之后
可以以任何顺序运行,并且由于所有测试都在同一个进程中运行,所以您的单例将具有相同的require缓存、相同的环境变量等。NodeJS无论如何都是单线程的,因此,除非等待延迟操作(如HTTP调用)完成,否则我怀疑您是否真的能从中获益。我有大约50个不同的descripe语句测试Rest API,所有测试都是相互独立的。我试图看看是否有可能一次或分批开始执行所有测试。我只是希望能够减少运行测试所需的时间。还有其他测试运行者(如Jasmine)可以支持它,但我根本不会这么做。在我的测试中,我会保持自信,并在任何一天进行一次稍微长一点的测试,这可能不是真正独立的,并且会导致误报,或者更糟的误报。这是有道理的。谢谢你的建议。@Louis你对用摩卡处理大量测试有什么建议吗?例如,我们进行了1900次测试,但由于Ember cli对除eslint等之外的所有搭建物进行了测试,测试数量仍在增加。MohamedElMahallawy我最大的摩卡套件进行了大约350次测试。所以你说的不是我必须用摩卡咖啡解决的问题。当我运行我的Selenium测试时,我遇到了上千个单独的测试,这些测试是用基于Python的语言运行的。当我手动运行测试时,我会积极地将测试数量缩小到仅与之直接相关的测试。我使用(也是基于Python的)自动启动贯穿整个套件的构建。你说“我不同意测试应该主要是同步的断言。”这很好,但没有人这么说。我和其他人所说的是,测试应该是顺序的,但“顺序”并不意味着“同步”。您展示的示例代码并不是让Mocha并行运行测试的示例。异步运行测试允许引擎并行许多缓慢的任务,如文件或网络访问。如果您的测试本身是计算密集型的,那么它不能替代并行进程,但是在我所看到的大多数情况下,异步测试可以大大减少测试时间——如果您在提交之前进行测试,这将是一种解脱。您没有提到我在前面的评论中所说的任何内容。