【问题标题】:How can I import ES6 class modules into Jasmine for testing?如何将 ES6 类模块导入 Jasmine 进行测试?
【发布时间】:2020-09-11 02:42:26
【问题描述】:

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

所有 Jasmine 示例都使用旧的 ES5 语法,使用 modules.export 定义为 functions 的类,然后使用 require 函数导入。我找到了诸如this 之类的网站,它们似乎使用了ES6 和import { module } from 'path' 语法,但我不知道为什么会这样,为什么我的不行?是因为我没有使用无头浏览器进行测试吗?这是因为 Jasmine 本身不支持这个功能,我需要一些其他的包吗?是因为我需要以某种特定方式使用jasmine-node 才能使其工作吗?我应该根本不使用 ES6 类吗?

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

例如我有一个模块。

// 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)
  })
})

【问题讨论】:

  • 嘿 OPKD 之前的答案对您有用吗?我处于完全相同的位置。 Jasmine 新手,无法通过“无法在模块外使用 import 语句”错误。
  • 它对我不起作用。但我认为这node --experimental-vm-modules <test_runner_file> 有效。基本上用运行测试的node_modules中的Jasmine文件的路径替换<test_runner_file>,它应该可以工作,你的package.json也需要设置"type": "module"

标签: javascript unit-testing ecmascript-6 jasmine es6-class


【解决方案1】:

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

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

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

安装汇总

npm install rollup --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
}

};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    相关资源
    最近更新 更多