Javascript 如何在角度测试控制器方法?

Javascript 如何在角度测试控制器方法?,javascript,angularjs,karma-jasmine,Javascript,Angularjs,Karma Jasmine,我正在尝试在我的angular应用程序中测试控制器。无论何时调用$controller方法,都会返回一个空对象 相关测试 describe("myCtrl", function() { beforeEach(module("myMod")); var myCtrl, scope; beforeEach(inject(function($controller, $rootScope) { scope = $rootScope.$new(); myCtrl = $control

我正在尝试在我的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不是一个函数

如果在调用该方法之前我
console.log(JSON.stringify(myCtrl))
,则表明
myCtrl
是一个空对象(
{}

我认为我的问题在于调用
$controller
,或者我需要以不同的方式设置范围


摘要:如何进行单元测试以便在控制器内调用方法?

函数/方法不在控制器中,而是在
$scope
中,因此应该是:

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

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

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

非常感谢。现在说得通了,谢谢。现在这是有道理的。