在描述'之前运行异步代码在摩卡

时间:2016-07-26 22:30:00

标签: node.js mocha

我尝试使用for循环动态生成测试,但生成的测试数量是从异步任务获得的。这是我的代码:

var noOfTestsToRun;

before(function() {
    return someAsyncTask().then(function(result) {
        noOfTestsToRun = result;
    })
});

describe('My Test Suite', function() {
    for (var i = 0; i < noOfTestsToRun; i++) {
        it('Test ' + i, function() {
            //...
        });
    }
});

但是,noOfTestsToRun = result在到达for循环时似乎无法执行。

我想知道是否有任何解决方案可以解决这类问题。谢谢。

1 个答案:

答案 0 :(得分:0)

done回调传递给您的before功能。

var noOfTestsToRun;

before(function(done) {
    return someAsyncTask().then(function(result) {
        noOfTestsToRun = result;

        // Complete the async stuff
        done();
    })
});

describe('My Test Suite', function() {
    for (var i = 0; i < noOfTestsToRun; i++) {
        it('Test ' + i, function() {
            //...
        });
    }
});

当您的异步任务完成并调用done()时,我们告诉Mocha异步内容已完成,并且可以继续预期。

<强>更新

所以,你的目标是让mocha运行你的动态测试。

你可以通过一些黑客实现这一目标。您需要it块来强制before执行。在之前的版本中,您可以根据异步结果动态生成it个测试。

before(function() {
    return someAsyncTask().then(function(result) {
        describe('My Test Suite (dynamic)', function() {
            for (var i = 0; i < result; i++) {
                it('Test ' + i, function() {
                    // ...
                });
            }
        });
    });
});

it('should force before to execute', function() {
    console.log('Hack to force before to execute');
});

Workouts endpoint