簡體   English   中英

AngularJs-如何使用私有方法編寫可測試的控制器

[英]AngularJs - How to write testable controllers with private Methods

我正在嘗試使用angular.js +茉莉花來為我的一個控制器編寫測試。

假設我有一個控制器

angular.module('app').controller('MyCtrl', function() {
    this.myFunc = function() {
        // ...
    };

    activate();

    function activate() {
        this.myFunc();
    }
});

該控制器具有一個稱為activate()的函數,該函數在創建控制器時被調用。

如何編寫對activate()函數的測試? (例如:在創建控制器時,應調用控制器函數“ myFunc()”)

我試圖寫這樣的東西:

describe('activate() controller', function() {
    it('should call function myFunc', inject(function($rootScope, $controller) {
        var locals     = {$scope: $rootScope.$new()};
        var controller = $controller('MyCtrl', locals);

        spyOn(controller, 'myFunc').toHaveBeenCalled();
    });
}

但是我得到了錯誤:

預期已調用間諜myFunc。

我認為在我創建間諜的那一刻,該控制器已經調用了Activate函數。

有沒有辦法測試這樣的控制器?

上面的代碼示例在初始化時執行myFunc方法。 因此,在您附加間諜時,它已被執行。 更好的測試方法是檢查myFunc執行了哪些轉換。

如果該方法是服務的一部分,則可以在注入中設置間諜程序,然后初始化控制器並期望已調用該服務方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM