当前我正在使用编写应用程序
- NodeJS v13.12.0
- 耶稣会士25.4.0
- xmljs 0.3.2
- 打字脚本3.8.3
- ts笑话25.4.0
此应用程序应模拟CalDAV服务器。出于这个原因,我依赖xmljs模块,它(经过我的研究(是唯一一个为我提供直接path
方法来查找XML中的属性的模块。
在节点Container中,应用程序运行良好,没有任何错误。但是当我用Jest开始测试时,测试失败,出现错误
ReferenceError: GLOBAL is not defined
at node_modules/xmljs/core.js:46:2
at Object.<anonymous> (node_modules/xmljs/core.js:176:3)
at node_modules/xmljs/XmlParser.js:3:11
at Object.<anonymous> (node_modules/xmljs/XmlParser.js:204:3)
我现在知道了,这个错误源于xmljs模块试图设置GLOBAL
变量,该变量在NodeJS中解析为global
。但这并非开玩笑。
我的代码如下所示:
import XmlParser = require("xmljs");
/*
* data is the body of a PROPFIND request
*/
new XmlParser({ strict: true }).parseString(data, (err, xmlNode) => {
// omit err
xmlNode.path(["propfind", "prop"], true);
const propertiesObj: XmlNode[] = childs[0].children;
const properties: string[] = [];
Object.keys(propertiesObj).forEach(n => {
properties.push(n);
});
logger.silly("Returning properties: %O", properties);
});
有人能吗
显示一个模块来使用,而不需要对我的代码进行巨大修改
- 它支持纯js实现,而不使用node-gyp(因为它可以在windows服务器上使用(
向我展示如何在xmljs 中伪造设置的GLOBAL变量
我感谢你的帮助
您可以在测试设置中设置GLOBAL
的值。GLOBAL
变量似乎是节点中global
的弃用形式。
在jest.config.js
文件中,您可以通过setupFiles
选项添加一个设置文件:
module.exports = {
[...] // Other configurations
setupFiles: ['<rootDir>/define-deprecated-global.js']
};
在文件define-deprecated-global
中,您可以将GLOBAL
变量定义为:
global.GLOBAL = global;