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

时间:2015-10-06 20:25:19

标签: javascript angularjs karma-jasmine

我正试图在我的角应用中测试一个控制器。每当我调用$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的调用,或者我需要以不同的方式设置我的范围。

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

1 个答案:

答案 0 :(得分:0)

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

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