使用Jasmine或任何其他替代方案在Node上运行测试.mjs / ESM

时间:2017-12-15 12:38:36

标签: javascript node.js testing jasmine es6-modules

由于--experimental-modules CLI切换(即node --experimental-modules),我的基于节点的项目是使用节点上的本机ES模块支持实现的。

显然,当我使用Jasmine node --experimental-modules ./node_modules/jasmine/bin/jasmine运行规范时,我收到以下错误:

  

错误[ERR_REQUIRE_ESM]:必须使用导入来加载ES模块

在Node中使用ES模块是否可以使用Jasmine?

如果没有,是否有替代不使用框架(例如使用npm脚本运行测试)?

2 个答案:

答案 0 :(得分:5)

这比我想象的容易。

它只是调用一个你可以调用run.mjs的文件,如下所示:

node --experimental-modules ./run.mjs

整个文件看起来像这样:

jasmine.mjs

import Jasmine from "jasmine"
import JasmineConsoleReporter from "jasmine-console-reporter"

const jasmine = new Jasmine()
jasmine.loadConfigFile( "./support/jasmine.json" )

jasmine.env.clearReporters()
jasmine.addReporter( new JasmineConsoleReporter( {
    colors: true,
    cleanStack: true,
    verbosity: 4,
    listStyle: 'indent',
    activity: false
} ) )

export default jasmine

您可以在单独的文件中添加以下规格:

import jasmine from './my-project/spec/jasmine.mjs'

jasmine.env.describe('Foo', () => {
    jasmine.env.it('Bar', () => {
        // Expects, assertions...
    })
})

最后,您将运行jasmine导入已配置的jasmine实例和规范:

import jasmine from './my-project/spec/jasmine.mjs'
import someSpec1 from './my-project/spec/someSpec1.mjs'
import someSpecN from './my-project/spec/someSpecN.mjs'

someSpec1()
someSpecN()

jasmine.execute()

答案 1 :(得分:2)

简化@Matias_Fidemraizer的解决方案,仅将重要位保留在一个文件中:

import glob from 'glob';
import Jasmine from 'jasmine';

const jasmine = new Jasmine();
jasmine.loadConfigFile('tests/jasmine.json');

// Load your mjs specs
glob('**/*-test.mjs', function (er, files) {
    Promise.all(
        files
            // Use relative paths
            .map(f => f.replace('tests/specs/', './'))
            .map(f => import(f)
                .catch(e => {
                    console.error('** Error loading ' + f + ': ');
                    console.error(e);
                    process.exit(1);
                }))
    )
        .then(() => jasmine.execute());
});

并使用

执行它
node --experimental-modules jasmine-run.mjs

您将在日志中遇到一些问题,收到类似消息

  

[...] .split('\ n')[...]

该消息表示您在mjs代码中存在异常。

您可以在此处关注:https://github.com/jasmine/jasmine-npm/issues/150