我可以使用动态导入将测试套件模块加载到 mocha 中吗?

Can I use dynamic imports to load test suite modules into mocha?

提问人:Michael Jonker 提问时间:10/22/2023 最后编辑:Michael Jonker 更新时间:10/22/2023 访问量:46

问:

我一直在使用以下结构使用 commonJs 构建我的测试;

// My main file
describe('unit tests', function(){
   require('./unit/test.spec.js');
})
describe('functional tests', function(){
   require('./function/test.spec.js');
})

//... and soforth ...

我的 test.spec.js 是沿着这些思路;

it('does something', function(){
    assert.equal(1,1);
})

通过这种方式,我可以在单独的文件中构建大量测试,并且效果很好。

我正在尝试对 ESM 动态导入做同样的事情,就像这样;

describe('functional tests', async function(){
   await import('./function/test.spec.js');
})

//... and soforth ...

然而,结果是现在.0 passing (0ms)

看起来要么是 Mocha 没有触发,要么是 ESM 没有运行导入的代码。也许有更好的方法?任何帮助都表示赞赏。describe

JavaScript 测试 mocha.js

评论


答:

0赞 Michael Jonker 10/22/2023 #1

我自己解决了这个问题;

简而言之,答案是否定的,动态导入在 Mocha 块中无法按预期运行。describe

但是,您可以使用顶级导入动态生成测试套件。(节点 >= v14.8.0,带 ESM 测试文件)

套件生成器文件因此成为;

export default function(){
    it('does something', function(){
        assert.equal(1,1);
    })
}

和顶层主文件;

import suite from './unit/test.spec.js'; //top level import
describe('unit tests',suite);

现在一切都像以前使用 commonJs 一样运行。