【问题标题】:Trying to understand how to use Angular-mock试图了解如何使用 Angular-mock
【发布时间】:2015-12-05 08:07:16
【问题描述】:

全部:

我对 Angular 测试很陌生,来自它的文档: https://code.angularjs.org/1.3.15/docs/guide/unit-testing

有一个例子:

angular.module('app', [])
.controller('PasswordController', function PasswordController($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';
    }
  };
});

以及测试规范:

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-Mock 做了什么,为什么我们可以直接使用像“inject”这样的函数,我们在哪里包含那个模块(或者它在加载时是否将该函数绑定到 WINDOW 全局对象?)? 注入函数如何告诉注入是针对控制器还是指令等,我发现它们都使用相同的注入函数。

【问题讨论】:

    标签: angularjs testing


    【解决方案1】:

    就像Angular ngMock documentation 所说:

    angular.mock.module 注意:这个函数也发布在 window 方便访问。

    angular.mock.inject 注意:这个函数也发布在 window 方便访问。

    这就是您可以直接访问这些功能的原因。

    inject 函数只是一种访问服务的简单方法,就像您在服务/指令/控制器/...中注入它们一样:它们是简单的单例,不需要 for 一些东西。

    【讨论】:

    • 谢谢,哎呀,我肯定不是一个好学生。但是我没有抓住注入部分,我的意思是从它的签名来看,当注入控制器和指令时,都只是将一个类似回调的函数作为注入函数的参数,但是那个类似回调的参数意味着不同,我只是想知道如何注入函数是否知道我们要注入什么(它取决于参数的数量)?
    • 关于这个有一个interesting post:它在回调中调用toString,它获取所有参数名称并在正确的位置注入正确的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多