шутка с xmljs GLOBAL не определено - PullRequest
0 голосов
/ 07 мая 2020

в настоящее время я пишу приложение, используя

  • NodeJS v13.12.0
  • Jest 25.4.0
  • xmljs 0.3.2
  • машинописный текст 3.8.3
  • ts-jest 25.4.0

Это приложение должно имитировать c сервер CalDAV. По этой причине я полагаюсь на модуль xmljs, который (после моих исследований) является единственным модулем, дающим мне прямой метод path для поиска свойств в XML.

В узле Контейнер приложение работает нормально, без ошибок. Но когда я запускаю тест с 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

Я ценю вашу помощь

1 Ответ

1 голос
/ 09 мая 2020

Вы можете установить значение GLOBAL в настройках ваших тестов. Кажется, что переменная GLOBAL является устаревшей формой global в узле.

В вашем файле jest.config.js вы можете добавить файл установки с помощью опции setupFiles :

module.exports = {
    [...] // Other configurations
    setupFiles: ['<rootDir>/define-deprecated-global.js']
};

А в файле define-deprecated-global вы можете определить переменную GLOBAL как:

global.GLOBAL = global;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...