我正在尝试使用Jest为KnockoutJs项目编写一些测试。
对于任何术语的道歉,下面我都错了,在大约十年不使用JS之后,我又回到了JS,但仍然可以绕过ES6模块之类的东西。
在我需要测试使用可剔除可观察对象的ViewModel之前,测试工作正常,我已将导入添加到我的viewmodel中,以使用ES6模块语法引入KnockoutJs并已进行babel设置以进行编译,因此它应可在node中工作。
我的视图模型看起来像这样...
export { myVm }
import * as ko from 'knockout'
function myVm() {
var self = this;
self.helloWorld = function () { return "Hello World" }
return self;
}
然后我的测试文件看起来像...
import * as vm from '../src/viewModels/myVm'
test('Returns Hello World', () => {
expect(vm.myVm().helloWorld()).toBe('Hello World');
});
执行笑话时,出现最大调用堆栈大小超出错误
如果我从ViewModel中删除import * as ko行,它可以正常工作,但是我不能引用敲除库中的任何对象类型。
不确定是否相关,但是我的.babelrc看起来像这样...
{
"presets": [
"env"
]
}
知道将Knockout导入ViewModel时我做错了什么吗?
编辑:这是我的package.json
{
"name": "blah",
"version": "1.0.0",
"description": "blah",
"main": "index.js",
"dependencies": {
"knockout": "^3.5.1"
},
"devDependencies": {
"babel-jest": "^24.9.0",
"babel-preset-env": "^1.7.0",
"jest": "^24.9.0"
},
"scripts": {
"test": "jest"
},
"author": "",
"license": "ISC"
}
您使用的是Babel 7之前的版本,并且在导入* as ko
语法时似乎有问题。
您可以升级到Babel 7,一切都会按需运行,也可以更改:
import * as ko from 'knockout'
至:
import ko from 'knockout'
Upuprating Babel
[有关如何升级Babel的资源很多,但这并不难。安装最新的Babel @babel/core
和@babel/core
:
@babel/preset-env
然后更改@babel/preset-env
的内容以具有新的npm install -D @babel/core @babel/preset-env
// OR
yarn add @babel/core @babel/preset-env --dev
,如下所示:
.babelrc
您可以省略@babel/preset-env
,但应始终使用它来最大程度地减少包含的polyfills:
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "current"
}
}
]
]
}