麻烦让茉莉花与角度一起工作

时间:2015-10-20 20:11:33

标签: angularjs unit-testing jasmine

我无法理解如何设置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');
    });
  });
});

但我对一些事情感到非常困惑。

  1. 文档说明您需要使用angular-mocks加载控制器,但在他们的示例中,他们不会将ngMocks声明为app依赖项(请参阅第一个代码块)我贴在上面。)
  2. 它表示您可以使用angular.mock.inject将控制器注入当前上下文。我加载了脚本http://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-mocks.js,现在全局范围内有一个angular.mock,但它没有inject方法。此外,由于测试代码在控制器之外运行,我不明白在角度应用程序中使用ngMocks依赖项如何帮助提供注入控制器的全局方法。整件事对我来说都没有意义。
  3. 同样适用于module。它表示您可以将其用于beforeEach(module('app'));,并且angular-mocks提供它,但angular.mock没有module方法。
  4. 如果有人能解释我做错了什么,我会非常感激!

1 个答案:

答案 0 :(得分:0)

所以我发现问题是我的angular-mocks的脚本标签之前我的Jasmine的脚本标签,当它真的需要之后。在Angular"文档"的典型精神中,没有提到这一点。重新排列脚本标记后,moduleinject都是全局可用的方法。

因此,要回答我的第一个问题,您不需要将ngMock放在依赖项中。这回答了问题2和问题3,因为moduleinject现在全球可用。

因此脚本需要按此顺序放置。

<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>