2015-11-16 126 views
1

我的應用程序中的$ scope函數內有一些匿名函數。這些都是匿名的,因爲我只需要它們在頁面加載時(它們所做的)正確運行一次。在這些匿名函數中,我將$scope.itemSuccess變量設置爲true並返回;當某些規格得到滿足時(不重要)。這些匿名函數也會增加一個$scope.counter;單元測試Javascript匿名函數

我不知道如何在茉莉花單元測試中定位這些匿名函數。我需要確保他們正確執行邏輯,並且適當地增加計數器。

+0

永遠不要單元測試的東西都是不向外面對。你想測試的聲音就像測試私有狀態一樣。不要測試它。 –

+0

相反 - 只要檢查計數器是否增加,當觸發它們時觸發它們(即向外) –

+0

只是命名函數,它不像你在任何情況下都不能這樣做...... – dandavis

回答

1

首先,您需要以某種方式訪問​​您的測試中的匿名函數,因此您必須將它們分配給一個變量或命名它們。一旦你這樣做了,爲了測試它們,你有兩個選擇:把測試放到閉包(你的主函數)本身或者把代碼添加到引用你想測試的函數的閉包中。

不幸的是,第一個選項不是很好,因爲顯而易見的原因,第二個選項膨脹了你的API。但是,正如Philip Walton在his blog post中出色地解釋的那樣,您可以使用選項二明確地在您的API中調用您的測試,然後將它們作爲構建過程的一部分移除。

菲利普進入在他的崗位有更詳細的,我建議你讀它,但這裏是一個快照,讓你開始:

function closure(){ 

     // public variables here 
     var publicVariable1 = 1; 
     var publicVariable2 = 2; 

     return { 
      publicVariable1 : publicVariable1, 
      publicVariable2 : publicVariable2, 
      __tests__: { 
       add: add, 
       subtract: subtract 
       } 
     }; 

     // private methods you do not wish to expose (but must for unit testing purposes).  
     function add(a,b){ 
      return a + b; 
     }; 

     function subtract(a,b){ 
      return a - b; 
     } 
    }