**アップデートで、匿名のエクスポートで関数をスタブにするためにrewireを使用してください。下のコメントによれば、ユースケースは明確ではないかもしれません。 展開するには、私のアプリケーションモジュールfoo()はbar()を呼び出します。これは複雑なロジックを実行し、ブール値を返します。私は単体テスト(Mocha)を作成していて、rewire
を使ってfoo()メソッドを再配線しようとしているので、バーを実際に呼び出すことなくtrue/falseをbar()に渡すことができます。NodeJS
無名関数内でbar()メソッドをスタブ(別名rewire)しようとしています。出来ますか?私は非常にいくつかの方法を試した後に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して、その内部のロジックが呼び出されないようにする必要があります。
あなたが達成しようとしているかを説明場合は、より良い助けを得ることができます。 "無名関数の中でrewire()bar()メソッド"は意味のある説明ではありません(少なくとも私にとって)。あなたは実際に何を達成しようとしていますか?希望の最終結果は何ですか? – jfriend00
私のアプリケーションでは、bar()はもっと多くのロジックを行い、他の関数を呼び出しますが、最終結果はtrueまたはfalseを返します。私はテストスイートでbar()関数をスタブしようとしているので、さまざまなテストシナリオでtrue/falseを返すことができます。 rewire()は、bar()のロジックを呼び出さずにfoo()の機能をテストするためにMochaで使用されています。理にかなっている? – tagyoureit