2015-07-10 47 views
0

我試圖驗證一個函數被點擊鏈接後調用。在Jasmine測試中用jQuery調用點擊,但看起來範圍與測試中的控制器不同。在這種情況下我怎樣才能使測試工作?有問題的代碼可以在http://plnkr.co/edit/yqKme59WD9isrZTCutKB?p=preview找到。如何間諜控制器的功能,由用戶界面點擊的鏈接調用?

describe('Testing a Hello World controller', function() { 
    var $scope; 
    var ctrl; 

    //you need to indicate your module in a test 
    beforeEach(module('plunker')); 

    beforeEach(inject(function($rootScope, $controller) { 
    $scope = $rootScope.$new(); 

    ctrl = $controller('MainCtrl as mc', { 
     $scope: $scope 
    }); 

    spyOn(ctrl, 'loadData').and.callThrough(); 
    })); 

    it('should call load data', function() { 
    ctrl.loadData(); 
    console.log("1:" + ctrl.name); 
    expect(ctrl.loadData).toHaveBeenCalled(); 
    }); 

    it('should call load data after link cliked', function() { 
    $('#change-name')[0].click(); 
    console.log("2:" + ctrl.name); 
    expect(ctrl.loadData).toHaveBeenCalled(); 
    }); 
}); 
+1

模板確實與控制器無關,所以我只是直接通過調用它來測試控制器功能。對於你的測試,假裝模板不存在,只是測試控制器的API – Phil

+0

這裏是我的意思的例子〜http://plnkr.co/edit/4MsnnrWllcNdLBvqpKdr?p=preview – Phil

+0

有沒有辦法弄到該模板使用的控制器或範圍?我只希望我能驗證由UI事件引起的這種狀態變化。 – barryku

回答

2

通常是分爲單元測試和端到端測試的測試。

在單元測試中,您可以測試組件,控制器,服務......您可以測試控制器是否正確調用其依賴關係。

UI(點擊,填寫輸入,...)主要是在瀏覽器中測試 - 硒,或http://www.protractortest.org/#/(萬一角)

在你的樣品,創建控制器的一個實例,但沒有模板,沒有DOM(僅適用於jasmine/test-runner DOM)。所以它不會工作。

+0

謝謝,我真正的測試實際上是將一個模板和$編譯加載到DOM中。你的建議解決了部分問題,但我仍然面臨着在控制器中設置到DOM中的$ digest變量的問題。前面的例子已經更新了工作代碼,我將更新我後來遇到的問題。 – barryku

相關問題