微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

单元测试 – 如何单位测试带角度的角度控制器$on?

我的Angular应用程序中有一个控件与事件侦听器,定义如下.
angular.module('test').controller('TestCtrl',function($rootScope,$scope,testService) {

    [...]

    $scope.$on("myEvent",function(args,value) {
      testService.doStuff(value);
    });
  });

这在应用程序本身中完美无缺.但是,当我尝试单元测试控制器的功能(使用Jasmine和Karma)时,每个测试方法会引发以下错误

TypeError: $scope.$on is not a function in [...]/testController.js

我在我的测试方法中创建控制器如下.

it('does stuff',inject(function($rootScope,$controller,testService) {
    var scope = $rootScope.$new;
    $controller('TestCtrl',{
      $scope : scope
    });

    [...]
  }));

我可以通过更改我的控制器来使用rootScope来解决问题:

$rootScope.$on(...)

但是当然应用程序不能像预期的那样工作.我也可以通过在我的测试代码中引入$on方法来摆脱错误

var scope = $rootScope.$new;
  scope.$on = function() {};

但是像这样的嘲笑听众就失败了测试我的真实代码的目的.

为什么测试代码没有找到范围的$on方法? (但是在rootScope上找到它…)

必须有一些基本的东西,我错过了这里,但是即使经过大量搜索和阅读Angular源代码,我也无法弄清楚.

$rootScope.$new是一个函数.你需要调用它($rootScope.$new()):
it('does stuff',testService) {
  var scope = $rootScope.$new();
  $controller('TestCtrl',{
    $scope : scope
  });

  [...]
}));

示例plunk:http://plnkr.co/edit/t1x62msmOQDkNItGzcp9?p=preview

原文地址:https://www.jb51.cc/angularjs/142618.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐