2016-06-11 1 views
0

Я пишу тесты для моего модуля npm. Эти тесты требуют установки нескольких версий модуля npm, чтобы проверить, будет ли модуль проверять их как совместимые или несовместимые.Узел require.cache delete не приводит к перезагрузке модуля

как-то все uncache библиотеки или функции, которую я нашел на StackOverflow или базы данных НПХ не работает ..

установить/удалить НПЕ модули, используя свои вспомогательные функции:

function _run_cmd(cmd, args) { 
    return new Promise((res, rej) => { 
     const child = spawn(cmd, args) 
     let resp = '' 
     child.stdout.on('data', function (buffer) { 
      resp += buffer.toString() 
     }) 
     child.stdout.on('end', function() { 
      res(resp) 
     }) 
     child.stdout.on('error', (err) => rej(err)) 
    }) 
} 

global.helper = { 
    npm: { 
     install: function (module) { 
      return _run_cmd('npm', ['install', module]) 
     }, 
     uninstall: function (module) { 
      decacheModule(module) 
      return _run_cmd('npm', ['uninstall', module]) 
     } 
    } 
} 

Это мой текущее decache функция, которая должна очистить все модули кэшей (я пробовал другие, в том числе НПХ модулей ни один из них не работал)

function decacheModules() { 
    Object.keys(require.cache).forEach(function(key) { 
     delete require.cache[key] 
    }) 
} 

Я установка несколько ве (https://www.npmjs.com/package/less)

В моем первом тесте я устанавливаю устаревшую версию, которая не имеет функции render.

В некоторых других тестах я устанавливаю последнюю версию, которая имеет функцию render. Так или иначе, если я тестирую эту функцию, проверка которой не выполняется. Если я пропустил первый тест, другой тест будет успешным. (render -функция есть).

Это заставляет меня верить, что удаление require.cache не имеет никакого влияния ...

Я использую узел v4.2.4.

ответ

0

Если есть ссылка на старый модуль:

var less = require('less'); 

Очистить кэш модуль не приведет эту ссылку на очищенную и перезагрузить модуль. Для этого, по крайней мере, вы не храните модуль в переменной, используйте «require (« less ») повсюду.

+0

Мне нужны модули с пользовательским письменным резольвером, который проверяет, соответствует ли версия пакета, установлен пакет и т. Д. Я попытался вырвать каждое требование, которое может содержать ссылку на модуль. Однако он все еще не работает ... Я не знаю, что делать дальше. Я могу опубликовать код теста и тестируемый модуль (около 150 строк кода) – l0rin