为什么将KnockoutJS导入要测试的ViewModel中时,超过最大调用堆栈大小的开玩笑错误?

问题描述 投票:3回答:1

我正在尝试使用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');
});

执行笑话时,出现最大调用堆栈大小超出错误

Error Screenshot

如果我从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"
}
javascript testing jestjs babel
1个回答
3
投票

您使用的是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"
        }
      }
    ]
  ]
}
© www.soinside.com 2019 - 2024. All rights reserved.