шуточный тест с xmljs GLOBAL не определен

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

  • NodeJS v13.12.0
  • Шутка 25.4.0
  • xmljs 0.3.2
  • машинопись 3.8.3
  • ц-шутка 25.4.0

Это приложение должно имитировать сервер 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. Покажите мне модуль, который можно использовать вместо этого, не требуя значительных изменений моего кода.

    • Which supports a pure js implementation without using node-gyp (since it may be used on windows server)
  2. Покажите мне, как сделать обходной путь в шутке, чтобы подделать эту ГЛОБАЛЬНУЮ переменную, установленную в xmljs

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


person TheDome    schedule 07.05.2020    source источник


Ответы (1)


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

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

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

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

global.GLOBAL = global;
person mgarcia    schedule 09.05.2020
comment
Спасибо. Я пытаюсь использовать хук beforeAll. Но этот не работал. Теперь этот метод наконец работает. Благодарю вас! - person TheDome; 10.05.2020