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

How to test a controller method in angular?

我正在尝试在我的 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 的调用上,或者我可能需要以不同方式设置范围。

总结:如何进行单元测试以便调用控制器内部的方法?

function/method不在控制器里,在$scope里,所以应该是:

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