Модули, которые я хочу протестировать и/или смоделировать, используют некоторые глобальные переменные.
Например, исходный код модуля делает ссылку на переменную session
, которая нигде не определена, но доступна во время выполнения.
Рассмотрим модуль globals.js
:
let globals = {
contextName: "DATA_PIPELINE",
reportContext: "report",
session: session
};
module.exports = globals;
session
не определено в этом файле, но доступно во время выполнения. Это глобальная переменная среды (не под моим контролем).
Я заметил, что с поддельными таймерами вам удалось заменить реализацию глобальных функций, таких как setTimeout. Как мы могли бы применить это к любой глобальной функции/объекту?
Может быть, sinon.replace(object, prop, replacement)
— это то, что вы ищете?
https://sinonjs.org/releases/v7.2.4/sandbox/#sandboxreplaceobject -property-replacement
Мы стараемся, чтобы список проблем GitHub был аккуратным и сосредоточивался на ошибках и обсуждениях функций. Этот билет выглядит как вопрос использования; опубликуйте его на StackOverflow и пометьте sinon
, чтобы более широкое сообщество могло помочь ответить на ваши вопросы.
В Node.js вы можете сделать что-то вроде:
global.session = sinon.stub();
// Proceed to import the modules that use the session global and run the tests