2011-01-05 185 views
0

我試圖看如果私人功能已被調用。最後我會去尋找變量的設置。Javascript單元測試茉莉花/單元測試 - 我如何測試一個私有函數是否被調用?

我的JavaScript看起來像一個函數和私有函數

mysamplefunction = function(item){ 

    /* figure out bla */  
    _myprivatefunction(item,bla) 

} 

_myprivatefunction = function(item, bla){ 


    /* do lots of exciting private things with item and bla */ 
} 

茉莉花似乎期待下面的語法..

spyOn(mysamplefunction ,'_myprivatefunction'); 

然而,由於我們的arent嚴格處理的實例,按照下mysamplefunction和_myprivatefunction不是一個方法(它只是另一個類)我不知道如何得到這個工作?有任何想法嗎 ??

+0

呃,當然,一個provate函數根據定義是一個實現細節,而不是你應該測試的東西。 – annakata 2011-01-05 13:04:45

+0

@annakata在現實世界中,它確實應該是私人的,但是我需要測試它以確保它確實可行。如果我在java中,我會用反射來改變方法的可訪問性,然後我可以高興地運行它們 - 這種類型的方法在JavaScript中似乎不可行。 – wmitchell 2011-01-05 15:02:04

回答

1

如果你描述它的函數聲明,我期望:

spyOn(window, '_myprivatefunction'); 

工作。

如果函數是一個封閉件內,那麼window將不得不變得像

TopLvlHeir.2ndlvel.samplefunctionpkg.publicTesting 

唯一的要求是,它是含有一個_myprivatefunction屬性的對象,例如firstArg[secondArg]是一個功能。

+0

我希望能夠spyon /檢查_myprivatefunction被稱爲不實際專門調用它的事實。 – wmitchell 2011-01-05 12:48:42

+0

@wmitchell,我知道。我的答案仍然存在 - 它根本不會調用函數。但是由於你已經在全局範圍聲明瞭'_myprivatefunction'(並被這樣調用),它所屬的對象是'window'。因此,我的代碼正在窺探'window'對象的''_myprivatefunction''屬性。 – 2011-01-05 12:51:03

+0

我有很多閉包,所以_myprivatefunction從窗口隱藏,但我已經將它添加到公共界面。沿着TopLvlHeir.2ndlvel.samplefunctionpkg.publicTesting_myprivatefunction的一些方法試圖找出你的例子中窗口的含義。 – wmitchell 2011-01-05 14:44:33