** Обновить. На комментарий ниже пример использования может быть неясным. Чтобы расширить, в моем модуле приложения foo() вызывает bar(), который выполняет некоторую сложную логику и возвращает логическое значение. Я создаю модульные тесты (Mocha) и пытаюсь перепрофилировать метод foo() с помощью rewire
, поэтому я могу передать true/false обратно в bar() без фактического вызова bar.Используйте команду rewire to stub в анонимном экспорте в NodeJS
Пытается заглушить (aka rewire) метод bar() внутри анонимной функции. Является ли это возможным? Я не вижу, как перезаписать bar(), попробовав несколько разных способов.
//foobar.js
module.exports = function(config) {
function bar() {
console.log('why am i in _%s_ bar?', config)
//some logic
return true
}
function foo() {
if (bar()) {
console.log('should not get here, but someVar is passing: ', someVar)
return true
} else {
console.log('should get here, though, and we still see someVar: ', someVar)
return false
}
}
return {
foo: foo,
bar: bar
}
}
и
//rewire_foobar.js
var rewire = require('rewire')
var myModule = rewire(__dirname + '/foobar.js')
myModule.__with__({
'bar': function(){
console.log('changing return to false from rewire')
return false
},
'someVar': "abcde"
})(function() {
var result = myModule('a').foo()
console.log('result is: ', result)
})
дает результаты
why am i in _a_ bar?
should not get here, but someVar is passing: abcde
result is: true
someVar
в настоящее время прошли через. Но мне нужно переписать bar(), чтобы логика внутри него не вызывалась.
Вы можете получить лучшую помощь, если вы объясните, что вы пытаетесь достичь. «rewire() метод bar() внутри анонимной функции» не является значимым объяснением (по крайней мере для меня). Что вы на самом деле пытаетесь достичь? Каков желаемый конечный результат? – jfriend00
В моем приложении bar() делает намного больше логики и вызывает другие функции, но конечным результатом является то, что он возвращает true или false. Я пытаюсь заглушить функцию bar() в моем тестовом наборе, чтобы я мог вернуть true/false в разных тестовых сценариях. Функция rewire() используется в Mocha для проверки функциональности foo() без вызова логики в bar(). Имеют смысл? – tagyoureit