gpt4 book ai didi

javascript - 单元测试 AngularJS 模块 Controller

转载 作者:数据小太阳 更新时间:2023-10-29 05:55:26 25 4
gpt4 key购买 nike

我正在查看 TODO MVC AngularJS 示例,我看到该应用程序被定义为一个模块。

var todomvc = angular.module('todomvc', []);

在 Controller 内部,我看到它们被定义为:

todomvc.controller('TodoCtrl', function TodoCtrl($scope, $location, todoStorage, filterFilter) {
//...
});

我的问题涉及单元测试...如何为该类编写单元测试?

我试过这样的事情:

describe('TodoCtrl', function () {
var controller;

beforeEach(function () {
controller = todomvc.TodoCtrl;
});

afterEach(function() {
controller = null;
});

describe('addTodo() method', function() {
console.log(controller)
it('should do something', function () {
expect(typeof controller.addTodo).toBe(true); //should fail
});

});
});

...但是“controller”最终为 null 或 undefined。

我是否需要修改 TODO MVC 应用程序以便传递给 todomvc.controller() 的函数不是匿名的?

任何方向将不胜感激,因为我是 Angular 的新手。

最佳答案

您需要使用$controller 服务来对 Controller 进行单元测试。

基本上,你做这样的事情:

var scope, ctrl;

beforeEach(inject(function($rootScope, $controller) {
scope = $rootScope.$new();
ctrl = $controller('TodoCtrl', {$scope: scope});
}));

//use scope and ctrl as needed

请参阅此处示例:https://github.com/angular/angular-phonecat/blob/master/test/unit/controllersSpec.js#L18

关于javascript - 单元测试 AngularJS 模块 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15302230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com