未定义带有xmljs GLOBAL的jest测试



当前我正在使用编写应用程序

  • 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);
});

有人能吗

  1. 显示一个模块来使用,而不需要对我的代码进行巨大修改

    • 它支持纯js实现,而不使用node-gyp(因为它可以在windows服务器上使用(
  2. 向我展示如何在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;

最新更新