如何在angular中测试控制器方法

How to test a controller method in angular?

本文关键字:测试 控制器 方法 angular      更新时间:2023-09-26

我正在尝试在我的angular应用程序中测试控制器。每当我调用$controller方法时,我都会返回一个空对象。

相关的测试

describe("myCtrl", function() {
beforeEach(module("myMod"));
var myCtrl, scope;
beforeEach(inject(function($controller, $rootScope) {
    scope = $rootScope.$new();
    myCtrl = $controller('myCtrl', {$scope: scope});
}));
it("$scope.compute", function() {
    expect(myCtrl.compute(1,1,1)).toBe(1);
});
});

控制器相关部件:

.controller('myCtrl', ["$scope","serviceA", "serviceB", function($scope, serviceA, serviceB){
    $scope.compute = function compute(a, b, c) {
        return serviceA.calc(a, b, c);
    };
}])

每当我运行我的测试,我得到一个错误,undefined is not a function .

如果在我调用方法之前我console.log(JSON.stringify(myCtrl)),它显示myCtrl是一个空对象({})。

我相信我的问题是调用$controller,或者也许我需要设置我的范围不同。

总结:我如何做一个单元测试,以便调用一个方法在我的控制器?

函数/方法不在控制器中,而是在$scope中,所以它应该是:

it("$scope.compute", function() {
    expect(scope.compute(1,1,1)).toBe(1);
});