如何将 ES6 类模块导入 Jasmine 进行测试?



我想对一些存储为模块的 ES6 类进行单元测试。但是,当我尝试运行测试时,import触发一条错误消息:Cannot use import statement outside a module这意味着我无法测试我的模块。

所有 Jasmine 示例都使用旧的 ES5 语法,其中类使用modules.export定义为functions,然后使用require函数导入。我发现像这样的网站似乎使用 ES6 和import { module } from 'path'语法,但我不知道为什么这有效,为什么我的不起作用?是因为我没有使用无头浏览器进行测试吗?这是因为 Jasmine 本身不支持此功能,我需要其他软件包吗?是因为我需要以某种特定的方式使用jasmine-node才能使其工作吗?我不应该使用 ES6 类吗?

很明显,我是节点和javascript的初学者,但我不会想到仅仅测试一个类的功能会如此困难,所以如果有人能给我一些关于如何在Jasmine中完成类模块测试的指导,我将不胜感激。

例如,我有一个模块。

// src/myClass.mjs
export class MyClass {
constructor() { }
}

我有一个简单的茉莉花单元测试。

// spec/myClassSpec.js
import { MyClass } from '../src/myClass.mjs'
describe('my class', function() {
var myClassInstance
beforeEach(function() {
myClassInstance = new MyClass()
})
it('is an instance of MyClass', function() {
expect(myClassInstance).toBeInstanceOf(MyClass)
})
})

我可能会迟到回答,但是在 Nodejs 中使用"import"语句并不像看起来那么简单。 require和导入之间几乎没有主要区别(例如异步(,因此不能简单地将一个转换为另一个。 **

  • 一个简单的解决方案是使用汇总

**. 完成模块后,可以使用汇总将此模块捆绑为 commonjs 文件。然后,该文件可用于测试。

安装汇总

npm 安装汇总 --save-dev

在已安装的汇总后,您需要将以下命令添加到"package.json"文件的脚本中

"dist": "rollup -c">

您需要在应用程序的根文件夹中有一个 rollup.config.js 文件。 rollup.config.js的内容是:

import { rollup } from "rollup";
export default {
input: './index.js',
output: {
file: 'dist/index.js',
format: 'cjs' //cjs stands for common js file
}

};

最新更新