これは私の前の質問と同じですが、これは変数ではなく関数に関するものです。私はモジュールを持っていて、その中の関数をモックしたいと思っています。これが私のcoffeescriptコードです:
root = exports ? this
root.prod = (->
iWantToBeMocked = -> alert "production"
doSomething = -> iWantToBeMocked()
return {
doSomething: doSomething
iWantToBeMocked: iWantToBeMocked
}
)()
root.test = (->
root.prod.iWantToBeMocked = -> alert "I mocked this"
root.prod.doSomething()
return {}
)()
これは「生産」に警告しますが、「私はこれを嘲笑しました」と警告したいと思います。これどうやってするの?
出力を取得するJavaScriptは次のとおりです。
var root;
root = typeof exports !== "undefined" && exports !== null ? exports : this;
root.prod = (function() {
var doSomething, iWantToBeMocked;
iWantToBeMocked = function() {
return alert("production");
};
doSomething = function() {
return iWantToBeMocked();
};
return {
doSomething: doSomething,
iWantToBeMocked: iWantToBeMocked
};
})();
root.test = (function() {
root.prod.iWantToBeMocked = function() {
return alert("I mocked this");
};
root.prod.doSomething();
return {};
})();
アップデート
元の質問の答えを適用して、自分で問題を解決する方法を見つけました。
root = exports ? this
root.prod = (->
iWantToBeMocked = -> alert "production"
doSomething = -> this.iWantToBeMocked()
return {
doSomething: doSomething
iWantToBeMocked: iWantToBeMocked
}
)()
root.test = (->
root.prod.iWantToBeMocked = -> alert "I mocked this"
root.prod.doSomething()
return {}
)()
this
次の行に注目してくださいdoSomething = -> this.iWantToBeMocked()
。しかし、ここでまだ答えなければならない問題があります。ここで使わなければならない理由がわかりませんthis
。あざけるという文脈で doSomething = -> this.iWantToBeMocked()
との違いを誰かに説明してもらいたいです。doSomething = -> iWantToBeMocked()