javascript - 如何以 Angular Testing Controller 方法?

标签 javascript angularjs karma-jasmine

我正在尝试在我的 Angular 应用程序中测试 Controller 。每当我调用 $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 相关部分:

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

摘要:如何进行单元测试以便调用 Controller 内的方法?

最佳答案

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

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

关于javascript - 如何以 Angular Testing Controller 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32979080/

相关文章:

javascript - 在 Javascript 中用 Null 填充字符串

angular - ng-bullet vs karma-parallel vs 在所有之前配置测试模块 - Angular 单元测试性能改进

javascript - JS iframe1.location.href 中的 AngularJS 元素

javascript - 设置选项后谷歌地图多边形不更新颜色?

javascript - 如何在 Microsoft Edge 中隐藏 html 视频控件(全屏模式)

angularjs - 我将如何使用 AngularJs 模拟 Jasmine 的 then() 响应测试

Angular 7 测试 - 异步函数调用 + async..await

javascript - 多页 Javascript 样式表更改器仅更改一个子页面中的样式表,而不是所有子页面中的样式表

javascript - 使用 AngularJS 向 KDB+ 进程发送 HTTP GET 请求

javascript - Truffle JS 测试不起作用