Как подключать данные заново

288
08 сентября 2017, 23:22

Я пишу тесты, мне нужно в 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 файлов, отличимые одной строчкой.

Может быть есть какой-то другой правильный способ проводить такие тесты?

Answer 1

Перед повторным вызовом модуля '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);

READ ALSO
Почему работает код когда все поля заполнены?

Почему работает код когда все поля заполнены?

Есть код который выглядит такКод работает, но есть нюанс

276
Как менять время в зависимости от местоположения пользователя?

Как менять время в зависимости от местоположения пользователя?

Создал я значит сайт-блог на MEAN(mongodb, expressjs, angular4, node

308
счётчик по клику плюс и минус

счётчик по клику плюс и минус

написал скрипт но он не работает, буду признателен если подскажите где ошибся, при нажатии counter-elem__plus число увеличиваеться на 1 при counter-elem__minus...

449