【发布时间】: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