Angular事件侦听器未出现在测试中

时间:2015-02-10 20:03:51

标签: javascript angularjs testing karma-runner mocha

假设我有一个指令:

angular.module('foo').directive('myDir', function () {
  return {
    restrict: 'E',
    link: function (scope) {
      var watcher = scope.$watch('foo, function () {});
      scope.$on('$destroy', function () {
        watcher();
      });
    }
  }
})

然后进行以下测试:

describe('myDir', function () {
  beforeEach(function () {
    module('foo');
    inject(function($compile, $rootScope) {
      var scope = $rootScope.$new();
      $compile('<my-dir></my-dir>')(scope);
      scope.$digest();
    });
  });

  it('listens for destroy', function () {
    expect(scope.$$listeners.$destroy).to.not.equal(undefined);
  });
});

哪个失败了: Error: expected undefined to not equal undefined

奇怪的是,如果我console.log(scope.$$listeners.$destroy)直接在expect之前,则日志显示一系列函数,而不是未定义,但测试仍然失败。

是什么导致监听器对断言不可见?有一个很好的解决方法吗?

1 个答案:

答案 0 :(得分:1)

.to.not.equal

更改

not.to.be

解决了问题