gpt4 book ai didi

javascript - NPM 包模块中的 Jest 单元测试失败并显示 `ReferenceError`

转载 作者:太空宇宙 更新时间:2023-11-04 01:35:32 28 4
gpt4 key购买 nike

安装 NPM 软件包(我自己的软件包之一)后,我的测试失败。

具体来说,我收到 ReferenceError: cc is not Define,堆栈跟踪指向我的 NPM 包中的导出之一。

cc 是来自游戏框架 (Cocos2d-x) 的对象,该对象包含在我的本地项目中。

游戏框架包含在我的 NPM 包中,但该包确实引用了该对象,并假设无论安装该包的项目也都已包含该游戏框架。因此,本质上,Cocos2d-x 是一种对等依赖项,但由于它本身不是 NPM 包,因此未列为依赖项。

我在项目中测试的代码没有对游戏框架进行任何引用。我从 NPM 包导入的方法不会引用游戏框架。我使用解构导入这些方法(例如 import { helper1 } from 'my-package')。

话虽如此,我不认为这是一个问题。但 Jest 不喜欢这样一个事实:cc 是从我的 NPM 包上完全不同的导出引用的(没有导入到正在测试的文件中)。换句话说,helper2 导致 Jest 失败,因为它确实引用了 cc,但 helper2 并未被导入。

我应该如何修复此错误以使测试通过?

最佳答案

我尝试重新创建与您类似的环境,但无法重现此错误:

<小时/>
/so
foo/
index.js
package.json
answer.test.js
package.json

这是./package.json的内容:(如您所见,它有 foo 作为依赖项)

{
"name": "so",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"scripts": {
"test": "jest"
},
"devDependencies": {
"jest": "^24.1.0"
},
"dependencies": {
"foo": "./foo"
}
}

这是./foo/package.json的内容:

{
"name": "foo",
"version": "1.0.0",
"main": "index.js",
"license": "MIT"
}

这是./foo/index.js:(如您所见 helper2 引用了一个未定义的全局变量。)

module.exports = {
helper1: () => 42,
helper2: () => cc
};

现在是测试文件:

const {helper1} = require('foo');

test('helper1 returns the answer', () => {
expect(helper1()).toBe(42);
});

当我运行测试(yarn test)时,测试通过,没有错误或警告。因此,Jest 似乎并不因为引用不在作用域内的全局对象的方法而烦恼。

也许您可以利用 Jest 配置选项:

  1. globals

    A set of global variables that need to be available in all test environments.

  2. setupFiles

    A list of paths to modules that run some code to configure or set up the testing environment. Each setupFile will be run once per test file. Since every test runs in its own environment, these scripts will be executed in the testing environment immediately before executing the test code itself.

关于javascript - NPM 包模块中的 Jest 单元测试失败并显示 `ReferenceError`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54713646/

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