簡體   English   中英

使用Jasmine或任何其他替代方案在Node上運行測試.mjs / ESM

[英]Running tests .mjs / ESM on Node using Jasmine or any other alternative

由於--experimental-modules CLI開關(即node --experimental-modules ),我的基於節點的項目是使用節點上的本機ES模塊支持實現的。

顯然,當我使用Jasmine node --experimental-modules ./node_modules/jasmine/bin/jasmine運行規范時,我收到以下錯誤:

錯誤[ERR_REQUIRE_ESM]:必須使用import來加載ES Module

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

如果沒有,是否有任何替代方法不使用框架 (例如使用npm腳本運行測試)?

這比我想象的容易。

它只是調用一個你可以調用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()

簡化@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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM