node.js - 节点模块导出,访问不存在的属性错误,Jasmine
问题描述
我正在使用客户的遗留代码,它是一个用于 Jasmine 测试的 node.js 项目。我的问题是,当我运行测试时,被调用的函数(在不同的文件中)找不到/查看使用导入文件的特定方法require
例子:
文件1.js
const file2 = require('./file2');
fdescribe('Login', file2.login);
文件2.js
const Api = require('./api');
module.exports = {
login() {
let user;
beforeAll(async () => {
user = await Api.createUser({
first_name: 'login test',
password: 'XXXX',
},
Api.USER_ROLE.ADMIN);
// more code within function...
});
// other functions
}
通过 IDE (VSCode),所有路径都是完整的,并且可以跟随“转到定义”。另外作为测试,我将登录功能的内容放入 file1.js 的描述块中,更新依赖关系,一切正常。但是我的老板和客户希望保持目前的结构。
当我按此处所示运行时,我收到以下警告:
(node:6021) Warning: Accessing non-existent property 'createUser' of module exports inside circular dependency
(node:6021) Warning: Accessing non-existent property 'USER_ROLE' of module exports inside circular dependency
代码运行但出现“无法读取未定义的属性”错误createUser
和USER_ROLE
。
我知道警告提到了循环依赖,但据我所知,没有,即只有 1->2->Api-> 等。
当从 file1.js 调用 file2.js 中的函数时,似乎 file2.js 中的 require 没有发生。
在没有更多高级支持的情况下,我相当初级/缺乏经验,因此我在这里伸出援手,这可能是一个相当简单的问题。
项目正在运行node version 14.17.0
Api.js 文件更像是一个库文件,它“链接”到在这种情况下包含的其他文件createUser
和USER_ROLE
.
[因为这是遗留的客户端代码,它在过去的某个时候工作过,我认为这可能与 Jasmine 或 Node JS 版本有关?]
节点警告/错误的更多详细信息:
(node:1693) Warning: Accessing non-existent property 'createUser' of module exports inside circular dependency
at emitCircularRequireWarning (internal/modules/cjs/loader.js:675:11)
at Object.get (internal/modules/cjs/loader.js:689:5)
at UserContext.<anonymous> (/home/runner/work/platform-validation/platform-validation/utils/dupes.js:45:24)
at QueueRunner.attempt (/home/runner/work/platform-validation/platform-validation/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:7756:40)
at QueueRunner.run (/home/runner/work/platform-validation/platform-validation/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:7798:25)
SYS.20: Login
✗ User can login
- TypeError: Cannot read property 'login' of undefined
at runNext (/home/runner/work/platform-validation/platform-validation/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:7715:18)
at next (/home/runner/work/platform-validation/platform-validation/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:7722:11)
at QueueRunner.onComplete (/home/runner/work/platform-validation/platform-validation/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:7615:9)
at Immediate.<anonymous> (/home/runner/work/platform-validation/platform-validation/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:7814:12)
at processImmediate (internal/timers.js:464:21)
(node:1693) Warning: Accessing non-existent property 'USER_ROLE' of module exports inside circular dependency
at emitCircularRequireWarning (internal/modules/cjs/loader.js:675:11)
at Object.get (internal/modules/cjs/loader.js:689:5)
at UserContext.<anonymous> (/home/runner/work/platform-validation/platform-validation/utils/dupes.js:49:11)
at QueueRunner.attempt (/home/runner/work/platform-validation/platform-validation/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:7756:40)
at QueueRunner.run (/home/runner/work/platform-validation/platform-validation/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:7798:25)
at runNext (/home/runner/work/platform-validation/platform-validation/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:7715:18)
at next (/home/runner/work/platform-validation/platform-validation/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:7722:11)
at QueueRunner.onComplete (/home/runner/work/platform-validation/platform-validation/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:7615:9)
at Immediate.<anonymous> (/home/runner/work/platform-validation/platform-validation/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:7814:12)
at processImmediate (internal/timers.js:464:21)
解决方案
解决方案是添加:
delete require.cache[require.resolve('./api')]
在这与 Node 缓存 require() 调用有关之前const Api = require('./api');
,file2.js
而不是像预期的那样重新调用。
有关更多说明,请参见链接:
推荐阅读
- html - 有没有办法使用 flex 使两个元素内联?
- mongodb - 如何使用 Spring Data JPA 按 Id 和 Boolean 查询设置为“True”
- javascript - UWP (JS) 应用程序中的自动后退按钮功能
- chart.js - Chart.js 如何在调整大小事件时更改散点图的点半径?
- javascript - 如果它们相等,则比较反应中的两个状态数组将不会返回布尔值(True)
- azure - 如何将 Azure 访问令牌转换为会话 cookie?
- python - 有没有办法使用 python 使用请求下载,一个 csv 的 url 就像'Blob:https'
- python - 跟踪功能无法按预期使用导入的文件
- git - 远程:错误:GH001:检测到大文件。您可能想尝试 Git 大文件存储 - https://git-lfs.github.com
- ssl - 当服务器验证客户端证书失败时,tls 1.3 客户端不报告握手失败