【发布时间】:2015-10-20 20:11:32
【问题描述】:
我无法理解如何设置 Jasmine 以与 Angular 一起使用,以便进行测试。我正在遵循标题为“测试控制器”标题下的说明here。根据文档,您应该像往常一样定义您的应用程序和控制器(这是从文档中粘贴的):
angular.module('app', [])
.controller('PasswordController', function PasswordController($scope) {
//controller code goes here (removed for brevity)
});
然后你应该有你的测试套件代码,例如(从文档中粘贴)。
describe('PasswordController', function() {
beforeEach(module('app'));
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('PasswordController', { $scope: $scope });
$scope.password = 'longerthaneightchars';
$scope.grade();
expect($scope.strength).toEqual('strong');
});
});
});
但我对一些事情感到非常困惑。
- 文档解释说您需要使用
angular-mocks来加载控制器,但在他们的示例中,他们没有将ngMocks声明为应用依赖项(请参阅我上面粘贴的第一段代码)。 - 它说您可以使用
angular.mock.inject将控制器注入到当前上下文中。我在脚本http://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-mocks.js 中加载,现在在全局范围内有一个angular.mock,但它没有inject方法。此外,由于测试代码在控制器之外运行,我不明白在 Angular 应用程序中使用ngMocks依赖项如何有助于提供注入控制器的全局方法。整件事对我来说毫无意义。 -
module也是如此。它说你可以将它用于beforeEach(module('app'));,它是由angular-mocks提供的,但是angular.mock 没有module方法。
如果有人能解释我做错了什么,我将不胜感激!
【问题讨论】:
标签: angularjs unit-testing jasmine