2016-01-12 66 views
1

我想在我的茉莉花測試套件如何在Jasmine中模擬DOM元素,使控制器可以訪問它?

 it('Test changing radio', function() { 
     testElement = angular.element("<div><input class='my_radio' type='radio' /></div>"); 
     testElement.find('input')[0].checked = true; 
     var scope = $rootScope.$new(); 
     $compile(testElement)(scope); 
     scope.$digest(); 

     console.log(testElement.find('input')[0].checked); // should print true 
     myController.changeRadio(); 
     console.log(testElement.find('input')[0].checked); // should print false 

    }); 

嘲笑DOM元素在我的控制器

function changeRadio(){ 
    for(var i = 0; i < angular.element('.testElement').length; i++){ 
     angular.element('testElement')[i].checked = false; 
    } 
} 

控制檯日誌應返回以下

true 
false 

由於myController.changeRadio改變無線電按鈕從真到假,我證實,當運行我的應用程序它的作品,但茉莉花測試套件沒有工作。我發現控制器根本找不到輸入元素。在測試過程中,有沒有辦法將$compiled DOM傳遞給控制器​​?

+0

從角度控制器中剔除html元素是一個壞主意,而您可以使用角度綁定 –

回答

0

看起來你的方法是錯誤的。 您正在單元測試中測試HTML元素,但不應該這樣做。 單元測試僅用於測試代碼。 使用量角器進行E2E測試用於測試HTML界面。

例如,我有...

<button ng-click="controller.fred()">hello</button> 

在我的單元測試我打電話測試控制器功能弗雷德。 在我的E2E測試中,我點擊按鈕,並根據我點擊的按鈕,對HTML界面進行期望(例如檢查或不檢查)。

希望這會有所幫助。