2013-04-10 51 views
0

我試圖測試類似於下面用茉莉花私有方法導致茉莉花測試失敗

closure.respond = function (value){ 
if(value) 
{ 
    thisIsAPrivateMethod(); 

} 
thisIsAPublicMethod(); 

} 

我的測試看起來像這樣

it('will display the calendar widget when value is true', function(){ 

    value=true 
    closure.respond(value); 
    expect(closure.thisIsAPublicMethod).toHaveBeenCalled(); 
) 

}) 

每當我運行測試我的一個函數在jasmine測試運行器中得到一個異常,指出在private函數內部調用的方法不存在。 (對象#沒有方法'methodName' )

我不關心私有函數的內部工作原理,我怎麼能忽略這個調用?

我可以忽略它嗎?顯然,我不能/不應該對它進行監視,因爲它是私人的。 任何方向將不勝感激。

感謝

回答

0

有兩點,你不能測試呼叫梅索德不可見從外面,只是因爲他們是不可見的。而且你不應該測試你想測試的對象的內部行爲。

+0

同意。我的問題是,在測試closure.respond時,它在內部調用一個私有方法,然後拋出一個錯誤,因爲它有一個尚未聲明的依賴關係。我需要走多遠的調用堆棧? – autofunk 2013-04-11 14:41:43

+0

不知道我是否理解這個問題,但爲什麼你有一個未聲明的依賴關係。你應該模擬/存根依賴關係,並將它注入到閉包中。或者,如果它是一個全球性的只是嘲笑它就像這個'jasmine.spy(window,'dependency')。並返回(someMockImplenetaion)' – 2013-04-11 15:03:41

+0

問題是,我試圖不關心自己在私人函數內的實現,但是,爲了讓這個測試能夠正常工作,我確實需要知道私有函數在測試期間執行的是什麼,我擔心的是我看起來會出現更多的依賴關係。我會最終到達那裏。感謝您的洞察力。 – autofunk 2013-04-11 16:08:15