节点模块导出,访问不存在的 属性 错误,Jasmine
node module exports, Accessing non-existent property error, Jasmine
我正在处理客户遗留代码,这是一个用于 Jasmine 测试的 node.js 项目。
我的问题是,当我 运行 测试被调用函数(在不同的文件中)时,无法 find/see 使用 require
导入到文件中的特定方法
示例:
file1.js
const file2 = require('./file2');
fdescribe('Login', file2.login);
file2.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)所有的路径都是完整的,可以跟随'go to definition'。同样作为测试,我将登录功能的内容放入 file1.js 中的 describe 块中,更新依赖关系,一切正常。但是我的老板和客户希望保留当前的结构。
当我 运行 如此处所示时,我收到以下警告:
(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
代码 运行s 但 createUser
和 USER_ROLE
有 'cannot read property of undefined' 个错误。
我知道警告提到了循环依赖,但据我所知有 none 即只有 1->2->Api-> 等
从 file1.js 调用 file2.js 中的函数时,file2.js 中的要求似乎没有发生。
我相当 junior/inexperienced 没有更多的高级支持,因此我来到这里,因为这可能是一个相当简单的问题。
项目 运行宁 node version 14.17.0
Api.js 文件更像是一个库文件,'links' 与本例中包含的其他文件 createUser
和 USER_ROLE
。
[因为这是遗留客户端代码并且它在过去的某个时间点工作,我认为它可能与 Jasmine 或 Node JS 版本有关?]
节点的更多详细信息warnings/errors:
(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')]
在 file2.js
中的 const Api = require('./api');
之前
这与节点缓存 require() 调用而不是按预期重新调用有关。
查看链接以获取更多说明:
How to remove module after "require" in node.js?
node.js require() cache - possible to invalidate?
我正在处理客户遗留代码,这是一个用于 Jasmine 测试的 node.js 项目。
我的问题是,当我 运行 测试被调用函数(在不同的文件中)时,无法 find/see 使用 require
示例:
file1.js
const file2 = require('./file2');
fdescribe('Login', file2.login);
file2.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)所有的路径都是完整的,可以跟随'go to definition'。同样作为测试,我将登录功能的内容放入 file1.js 中的 describe 块中,更新依赖关系,一切正常。但是我的老板和客户希望保留当前的结构。
当我 运行 如此处所示时,我收到以下警告:
(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
代码 运行s 但 createUser
和 USER_ROLE
有 'cannot read property of undefined' 个错误。
我知道警告提到了循环依赖,但据我所知有 none 即只有 1->2->Api-> 等
从 file1.js 调用 file2.js 中的函数时,file2.js 中的要求似乎没有发生。
我相当 junior/inexperienced 没有更多的高级支持,因此我来到这里,因为这可能是一个相当简单的问题。
项目 运行宁 node version 14.17.0
Api.js 文件更像是一个库文件,'links' 与本例中包含的其他文件 createUser
和 USER_ROLE
。
[因为这是遗留客户端代码并且它在过去的某个时间点工作,我认为它可能与 Jasmine 或 Node JS 版本有关?]
节点的更多详细信息warnings/errors:
(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')]
在 file2.js
中的 const Api = require('./api');
之前
这与节点缓存 require() 调用而不是按预期重新调用有关。
查看链接以获取更多说明:
How to remove module after "require" in node.js?
node.js require() cache - possible to invalidate?