我无法理解如何设置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
声明为app依赖项(请参阅第一个代码块)我贴在上面。)angular.mock.inject
将控制器注入当前上下文。我加载了脚本http://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-mocks.js,现在全局范围内有一个angular.mock
,但它没有inject
方法。此外,由于测试代码在控制器之外运行,我不明白在角度应用程序中使用ngMocks
依赖项如何帮助提供注入控制器的全局方法。整件事对我来说都没有意义。module
。它表示您可以将其用于beforeEach(module('app'));
,并且angular-mocks
提供它,但angular.mock没有module
方法。如果有人能解释我做错了什么,我会非常感激!
答案 0 :(得分:0)
所以我发现问题是我的angular-mocks
的脚本标签之前我的Jasmine的脚本标签,当它真的需要之后。在Angular"文档"的典型精神中,没有提到这一点。重新排列脚本标记后,module
和inject
都是全局可用的方法。
因此,要回答我的第一个问题,您不需要将ngMock
放在依赖项中。这回答了问题2和问题3,因为module
和inject
现在全球可用。
因此脚本需要按此顺序放置。
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/jasmine-html.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.4/boot.js"></script>
<!--angluar mocks script MUST go after the other declarations otherwise it won't add the inject and module methods to the scope -->
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-mocks.js"></script>