gpt4 book ai didi

javascript - 在 Angular.js 中对 Controller 进行单元测试

转载 作者:行者123 更新时间:2023-12-03 10:54:44 24 4
gpt4 key购买 nike

我正在关注有关如何对 Controller 进行单元测试的 Angular 教程。我正在使用 Karma 和 Jasmine 进行测试。当我运行测试时,我得到

Error: [ng:areq] Argument 'testController' is not a function, got undefined

关于如何在 test.js 中加载 testController 有什么想法吗?代码如下。谢谢!

<!-- app.js --> 

var simulatorApp = angular.module('simulatorApp', ['ngRoute', 'ngResource', 'ngCookies'],

simulatorApp.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/', {templateUrl: '/angular/views/home.html', controller: homeController})
.when('/test', {templateUrl: '/angular/views/test.html', controller: testController})
.otherwise({redirectTo: '/'});
}]);

<!-- testController.js -->

function testController($scope) {
$scope.password = '';
$scope.grade = function () {
var size = $scope.password.length;
if (size > 8) {
$scope.strength = 'strong';
} else if (size > 3) {
$scope.strength = 'medium';
} else {
$scope.strength = 'weak';
}
};
}

<!-- test.js -->
describe('testController', function() {
beforeEach(module('simulatorApp'));

var $controller;

beforeEach(inject(function (_$controller_) {
// The injector unwraps the underscores (_) from around the parameter names when matching
$controller = _$controller_;
}));

describe('$scope.grade', function () {
it('sets the strength to "strong" if the password length is >8 chars', function () {
var $scope = {};
var controller = $controller('testController', {$scope: $scope});
$scope.password = 'longerthaneightchars';
$scope.grade();
expect($scope.strength).toEqual('strong');
});
});
})

最佳答案

这是一个工作 plunkr .

Narek Mamikonyan回答您尚未在模块上注册 Controller 。

simulatorApp.controller('testController', testController);

function testController($scope) {
...
};

homeController 可能存在同样的问题

simulatorApp.controller('homeController', homeController);

function homeController($scope) {
...
};

此外,您应该尝试将您的 Controller 声明为类似这样的内容,因为如果您对 javascript 文件进行了缩小,这不会爆炸

simulatorApp.controller('testController', ['$scope', testController]);

如果不这样做,缩小后 $scope 将不再相同,并且您的应用将无法运行。

关于javascript - 在 Angular.js 中对 Controller 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28306802/

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