gpt4 book ai didi

javascript - 当我将 KnockoutJS 导入我正在测试的 ViewModel 时,为什么 Jest 错误超过最大调用堆栈大小?

转载 作者:行者123 更新时间:2023-11-28 19:47:20 24 4
gpt4 key购买 nike

我正在尝试使用 Jest 为 KnockoutJs 项目编写一些测试。

对于我在下面弄错的任何术语,我深表歉意。在大约 10 年没有使用 JS 并且仍然在思考 ES6 模块之类的东西之后,我将回到 JS。

测试工作正常,直到我需要测试一个使用 knockout 可观察对象的 ViewModel,我在我的 viewmodel 中添加了一个导入以使用 ES6 模块语法引入 KnockoutJs 并设置了 babel 来编译它,因此它应该在节点中工作.

我的 View 模型看起来像这样......

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');
});

当我执行 Jest 时,我得到一个超出最大调用堆栈大小的错误

Error Screenshot

如果我从我的 ViewModel 中删除 import * as ko 行,它可以正常工作,但我无法引用 knockout 库中的任何对象类型。

不确定它是否相关,但我的 .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'

升级 Babel

关于如何升级 Babel 的资源很多,但并不难。安装最新的 Babel @babel/core@babel/preset-env :

npm install -D @babel/core @babel/preset-env

// OR

yarn add @babel/core @babel/preset-env --dev

然后更改 .babelrc 的内容,使新的 @babel/preset-env 像这样:

{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "current"
}
}
]
]
}

您可以省略 target,但您应该始终使用它来尽量减少包含的 polyfill:

{
presets: ['@babel/preset-env']
}

关于javascript - 当我将 KnockoutJS 导入我正在测试的 ViewModel 时,为什么 Jest 错误超过最大调用堆栈大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59171650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com