【问题标题】:Test for an instance of angular scope测试角度范围的实例
【发布时间】:2013-10-12 13:15:14
【问题描述】:

我正在使用 Karma、Mocha、Chai 和 CoffeeScript 堆栈进行单元测试,并希望测试一个变量是否为角度范围。

这样的东西很好,但不起作用:

 scope = $rootScope.$new()
 expect(scope).to.be.an.instanceOf $rootScope

我已经尝试了所有我能想到的变体,包括$rootScope::$rootScope.$new() 作为instanceOf 的参数。

有没有办法做到这一点?


目前我打算这样做:

expect(scope.$id).to.exist 

这不太理想。


答案:

这是咖啡/摩卡/柴的“空”答案

 expect(scope.constructor.name).to.equal 'Scope'

【问题讨论】:

  • 你要断言什么? scoperootScope 的类型相同?
  • 只是scope 是一个角度范围。或者更确切地说,scope 可以被认为具有某种角度范围。

标签: angularjs coffeescript mocha.js karma-runner chai


【解决方案1】:

不太确定您要完成什么,但在 jasmine 测试中这将是true

var $scope = $rootScope.$new();
expect($scope.constructor.name).toBe('Scope');

【讨论】:

  • 这仅适用于您在 Angular 上使用非 .min 版本(因为 .min 似乎返回为“h”)
【解决方案2】:

如果您可以访问$rootScope,那么您可以执行以下操作:

var $scope = $rootScope.$new();
expect($scope.constructor).toEqual($rootScope.constructor);

这也适用于 angular 的缩小版本。

如果某物不是Scope 对象,那么您可以将其转换为这样的对象:

// In this case `context` might be a scope object or just a POJO.
if (context.constructor !== $rootScope.constructor) {
    context = angular.extend($rootScope.$new(), context);
}

【讨论】:

    最近更新 更多