我正在使用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();
});
});
答案 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()
块。