繁体   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