如何在 Mocha 测试框架内按顺序同步调用异步函数?

How can I synchronously call asynchronous functions sequentially within the Mocha Test Framework?

请不要建议模拟数据库模型,因为这不是我可用的选项,我知道这是一种更好的测试方法。

我有几个必须按以下顺序创建的数据库模型:

A -> B -> C -> D

我正在使用 Sequelize 和 Mocha 测试框架。我想在我的测试数据库中创建这些模型作为测试设置的一部分。

describe('My Tests', () => {
    before(done => {
         models.aModel.create({ name: 'A'}).then((a) => { done(); });
         models.bModel.create({ name: 'B'}).then((b) => { done(); });
         models.cModel.create({ name: 'C'}).then((c) => { done(); });
         models.dModel.create({ name: 'D'}).then((d) => { done(); });
    });
});

很明显这是行不通的。在伪代码中,我想做的是:

describe('My Tests', () => {

    before(done => {
        await creation of a
        await creation of b
        await creation of c
        await creation of d
    });
});

我该怎么做?

您可以简单地链接调用:

describe('My Tests', () => {
    before(done => {
         models.aModel.create({ name: 'A'})
         .then(() => models.bModel.create({ name: 'B'}))
         .then(() => models.cModel.create({ name: 'C'}))
         .then(() => models.dModel.create({ name: 'D'}))
         .then(() => { done(); });
    });
});

function f(str) {
    console.log('Started: ' + str);
    return new Promise(resolve => { console.log('finished: ' + str); resolve(); });
}

f('a')
.then(() => f('b'))
.then(() => f('c'))
.then(() => f('d'))
.then(() => { console.log('done'); });

尝试这样的事情:

 before(async function () { 
        await models.aModel.create({ name: 'A'});
        await models.bModel.create({ name: 'B'});
        await models.cModel.create({ name: 'C'});
        await models.dModel.create({ name: 'D'});

 })

在异步函数中,您可以等待解决承诺。