2010-05-10 18 views
3

我目前正在嘗試爲我的JavaScript應用程序創建一個測試套件。我的問題是,似乎我無法訪問的init()從我的utils的對象,你可以看到如下:如何訪問其中的另一個對象的單身人士的'私人功能'

我有我的應用程序,遵循一個單例模式:

var appModal = function() { 
    var utils = Object.create(moduleUtils); 
    function init(caller, options) { 
    } 
}(); 

我的測試套件是在moduleUtils中,這是將對象文字轉換爲原型

moduleUtils.debug = { 
    addSlideTest : function(){ 
     /* this function cannot fire init() from appModal */ 
}} 
+0

見http://stackoverflow.com/questions/716207/testing-private-functions-in-javascript和http:/ /stackoverflow.com/questions/1881078/testing-javascript-functions-inside-anonymous-functions – 2010-05-10 02:32:33

回答

1

這是不可能的。
您需要公開可見對象中的封閉函數。

例如,您可以在單元測試中創建一個testMethods對象來收集私有方法。那麼你的主要文件將被添加私有方法的對象,如果它存在,就像這樣:

//In appModal 
if (typeof testMethods === "object") 
    testMethods.init = init; 

//In test suite 
testMethods = { }; 
... 
testMethods.init(); 
+0

這並不完美,但它比不測試它們好得多 – 2010-05-10 12:06:35