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

问题描述 投票:0回答:2

我想对一些存储为模块的 ES6 类进行单元测试。但是,当我尝试运行测试时,

import
会触发错误消息:
Cannot use import statement outside a module
,这意味着我无法测试我的模块。

所有 Jasmine 示例都使用旧的 ES5 语法,其中使用

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

很明显,我是 Node 和 javascript 的初学者,但我不会想到仅仅测试类的功能会这么困难,所以如果有人能给我一些关于 如何完成测试类模块的指导在《茉莉花》中我会非常感激.

例如我有一个模块。

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

我有一个简单的 Jasmine 单元测试。

// 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)
  })
})
javascript unit-testing ecmascript-6 jasmine es6-class
2个回答
2
投票

我可能迟到了,但是在 Nodejs 中使用“import”语句并不像看起来那么简单。 require 和 import 之间几乎没有什么主要区别(比如异步),因此不能简单地将其转换为另一种。 **

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

**。 完成模块后,您可以使用 rollup 将此模块捆绑为 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
}

};


0
投票

将 Node 升级到版本 13 或更高版本。通过将 package.json 中的“type”字段设置为“module”,在 Node 中启用 ECMAScript 模块

{
  "type": "module",
  ...
}
© www.soinside.com 2019 - 2024. All rights reserved.