Mocha与done()回调并行运行异步测试

时间:2015-06-29 22:00:42

标签: node.js asynchronous mocha

我正在使用Mocha运行一些异步测试,但是一些未来的测试无法执行,直到之前的测试完成。为此,我可以简单地使用done()回调来同步运行它们:

describe('first operations', function() {
    it('should do something', function(done) {
        longOperation(function(err) {
            done();
        });
    });
    it('should do something', function(done) {
        longOperation(function(err) {
            done();
        });
    });
});

describe('second operations', function() {
    it('should do something', function(done) {
        longOperation(function(err) {
            done();
        });
    });
    it('should do something', function(done) {
        longOperation(function(err) {
            done();
        });
    });
});

这样做会减慢整个操作的速度,因为我无法同步运行每个it()块。我想异步运行内部测试,并且每个都同步描述块,但done()回调似乎没有那样工作(至少使用async)。

我做错了什么,或者根本不支持?如果没有,有没有办法解决这个问题以实现我的目标?

describe('first operations', function(done) {
    async.parallel([
        function(callback) {
            it('should do something', function() {
                longOperation(function(err) {
                    callback();
                });
            });
        },
        function(callback) {
            it('should do something', function() {
                longOperation(function(err) {
                    callback();
                });
            });
        }
    ], function(err) {
        done();
    });
});

describe('second operations', function(done) {
    async.parallel([
        function(callback) {
            it('should do something', function() {
                longOperation(function(err) {
                    callback();
                });
            });
        },
        function(callback) {
            it('should do something', function() {
                longOperation(function(err) {
                    callback();
                });
            });
        }
    ], function(err) {
        done();
    });
});

2 个答案:

答案 0 :(得分:2)

似乎已经创建了

mocha-parallel-tests来满足这种需求。这是项目网站的描述:

  

通常使用mocha编写的测试按顺序运行。这是因为每个测试套件都不应该依赖于另一个。但是如果你正在运行花费大量时间的测试(例如使用Selenium Webdriver进行测试),那么等待这么多时间是不可能的。

我相信这会并行运行所有测试。要限制描述块按顺序运行,您可以将它们放在单个文件中,然后分别对这些文件运行mocha-parallel-tests

答案 1 :(得分:1)

context.describe()似乎不是Runnable的实例。另一方面,context.it()似乎正在创建Runnable的实例。它看起来只是Runnable receive a callback的实例。

所以不,看起来你不能以异步方式运行封闭的describe()块时串行运行it()块。