2015-08-13 57 views
1

我在TypeScript上編寫代碼。這裏是我的代碼片段:在TypeScript中關閉的Stubbing函數

module mymodule { 

    export function internalFunc() { 
     return 1; 
    } 

    export function externalFunc() { 
     return internalFunc() + 1; 
    } 
} 

將被編譯成這個JS:

var mymodule; 
(function (mymodule) { 
    function internalFunc() { 
     return 1; 
    } 
    mymodule.internalFunc = internalFunc; 
    function externalFunc() { 
     return internalFunc() + 1; 
    } 
    mymodule.externalFunc = externalFunc; 
})(mymodule || (mymodule = {})); 
//# sourceMappingURL=file1.js.map 

我需要測試externalFunc與磕碰internalFunc(例如,它應該返回7)。但提及internalFunc已關閉,我可以更改mymodule.internalFunc,但externalFunc將使用舊的internalFunc。我試圖使用sinon.stub(mymodule, 'internalFunc', function() {return 7}),但它也沒有工作。我可以正確存根我的功能嗎?

+0

您應該在此測試的「單元」可能是您的整個模塊。您無需在單個功能級別進行單元測試。 –

+0

「*我可以更改mymodule.internalFunc,但externalFunc將使用舊的internalFunc *」 - 這聽起來不正確。你能否詳細說明你在測試中如何使用這個功能? – Katana314

回答

0

你可以通過mymodule.internalFunc() + 1而不是internalFunc() + 1引用它:

module mymodule { 
    export function internalFunc() { 
     return 1; 
    } 

    export function externalFunc() { 
     return mymodule.internalFunc() + 1; 
    } 
} 

mymodule.internalFunc =() => 7; 
console.log(mymodule.externalFunc()); // 8 

現在,你應該能夠在你所描述的方式來使用它(雖然我不熟悉興農):

sinon.stub(mymodule, 'internalFunc',() => 7); 
assertEquals(8, mymodule.externalFunc());