NodeJS Mochajs测试在使用async/await时保持运行

ubbxdtey  于 2023-08-04  发布在  Node.js
关注(0)|答案(1)|浏览(151)

我正在使用mochajs来测试一个express API。我有一些异步函数,因为我查询一个数据库。我在这个github问题中读到,使用async / await应该可以工作。但是,测试一直在运行,我必须手动关闭进程,而不管promise是否已解决,如console.log中所示。
令人惊讶的是,如果我只运行使用相同async / await模式的前一个测试,它就会停止。唯一的区别是,在第二个例子中,在测试的函数中有另一个await,但它也被正确地解决了。

it('Returns error when token is not correct', async () => {
            let result = await addSciStudy({token: 'fake'})
            console.log(result)
            expect(result).to.have.key('error')
        });

// { error: 'Token is not correct, please contact the administrator' }

字符串
下面是测试(第12行):https://github.com/icra/snappAPI-v2/blob/main/tests/test-add-sci-study.js
这里是测试函数:https://github.com/icra/snappAPI-v2/blob/main/lib/add-sci-study.js

  • 谢谢-谢谢
iq0todco

iq0todco1#

我发现问题了。在测试的函数中,调用了另一个查询数据库的函数。Mochajs正在等待连接关闭以停止测试。因此,我创建了一个函数来关闭可以在测试脚本中导入的连接:

const closeDB = function(){
    connection.end()
    return 0
}

字符串
问题是,当连接关闭时,则不再打开。因此,如果其他测试查询数据库,它们就会失败。我所做的是在最后创建一个假测试,一旦所有测试都运行了,就关闭连接:

describe('test something', () => {
    describe('all the test here', () => {
        <all tests here>
    });
    describe('close DB connection', () => {
        it('close DB connection', () => {
            closeDB()
        });
    });
});


唯一的缺点是,当一个测试以交互方式运行时,仍然必须手动停止该测试。但是当测试以编程方式运行时,它会停止,例如,如果您想将它们集成到bash脚本中以在部署之前进行测试,这一点很重要。

相关问题