2014-09-03 2 views
4

Я пытаюсь проверить функцию в модуле. Эта функция (я буду называть ее как function_a) вызывает другую функцию (function_b) в том же файле. Таким образом, этот модуль выглядит так:nodejs переопределяет функцию в модуле

//the module file 

module.exports.function_a = function(){ 
    //does stuff 
    function_b() 
}; 

module.exports.function_b = function_b = function() { 
    //more stuff 
} 

Мне нужно проверить функцию function_a с конкретным результатом функции function_b.

Я хотел бы переопределить функцию function_b из своего тестового файла, а затем вызвать функцию_файла из моего тестового файла, в результате чего функция function_a вызовет эту функцию переопределения вместо функции function_b.

Просто к сведению, я пытался и преуспел в первостепенных функций из отдельных модулей, как this вопрос, но это не то, что меня интересует.

Я попытался код ниже, и насколько как я знаю, не работает. Это делает иллюстрирует, что я собираюсь, хотя.

//test file 
that_module = require("that module") 
that_module.function_b = function() { ...override ... } 
that_module.function_a() //now uses the override function 

Есть ли правильный способ сделать это?

ответ

3

С внешней стороны кода модуля вы можете изменять только этот объект exports. Вы не можете «попасть в» модуль и изменить код function_b в коде модуля. Тем не менее, вы можете (и в вашем последнем примере) изменили значение exports.function_b.

Если вы меняете function_a на номер exports.function_b вместо function_b, то ваше внешнее изменение в модуле произойдет, как ожидалось.

+0

Это сработало отлично! Благодаря тонну! –

Смежные вопросы