Я пишу тесты, мне нужно в beforeEach каждый раз обновлять переменную mw. Это глобально доступный синглтон. Из него берутся все данные окружения для тестов. Внутри теста я их хочу подменять.
Файл mw.js
export var mw = {
config: {
r: {},
get: (arg) => {
return mw.config.r[arg]
}
},
}
let mw = require('./mw').mw // на самом деле глобальная
mw.config = 'test'
console.log(mw.config) // test
mw = require('./mw').mw
console.log(mw.config) // test
console.log(require('./mw').mw.config) // test
Почему это так работает? Как сделать так, чтоб при каждом выполнении функции данные подхватывались заново?
Мне нужно подменять некоторые данные для тестов и точно не хочется заводить 50 файлов, отличимые одной строчкой.
Может быть есть какой-то другой правильный способ проводить такие тесты?
Перед повторным вызовом модуля 'mw', вы должны удалить его из кэша
let mw = require('./mw').mw // на самом деле глобальная
mw.config = 'test'
console.log(mw.config) // test
delete require.cache[require.resolve('./mw')];
mw = require('./mw').mw
console.log(mw.config) //""
console.log(require('./mw').mw.config) //""
Как вариант в функции beforeEach сразу копировать объект let mw = Object.assign({}, require('./mw').mw);
Сборка персонального компьютера от Artline: умный выбор для современных пользователей