3

这是一些在 AngularJS 指令trigger的函数中调用 jqLit​​e 的 Javascript 。link

angular.
  module('myApp').
  directive('myDirective',
    function($timeout) {
      return {
        link: function(scope) {

          scope.resetChosenElements = function() {
            $timeout(function() { 
                $('[chosen]').trigger('chosen:updated'); 
            }, 0);
          }

          scope.resetChosenElements();          

        }
      };
    }
  );

我如何编写一个测试来检查trigger在创建指令时调用而不监视$.trigger?(我不想监视,$.trigger因为它会捕获对它的所有调用,包括那些来自其他指令的调用)。

有没有办法监视element可以传递给的论点link

编辑:我关于监视的评论element似乎引起了混乱。我只是暗示,如果解决方案需要添加element到传递给的参数,link那很好。但是目前我没有其他用途,这就是为什么它被排除在参数列表之外的原因。

4

1 回答 1

1

正如@Michael Benford所说,您没有在代码示例中使用的那样模拟trigger您可以监视的函数的Rathen,无论如何考虑您的问题似乎令人困惑:elementelement

这个例子是使用ChaiJS作为断言工具和 SinonJS作为间谍/存根/模拟库你应该添加spy一个element customEvent

beforeEach(inject(function($rootScope, $compile, _$httpBackend_) {
    $scope = $rootScope.$new();
    compile = $compile;
    $httpBackend = _$httpBackend_;
    el = angular.element('<elementTemplateTag></elementTemplateTag>');
    compile(elm)($scope);
    spy = sinon.spy(el, "customEvent"); // Add spy on the event call
}));

afterEach(function(){
 el.customEvent.restore(); //clean spy calls
});

it('element.customEvent() called once', function() {

    el.trigger('customEvent');
    $timeout.flush(); // release all timeouts

    expect(el.customEvent.calledOnce()).to.be.true;
});

我希望这对你有用。

于 2015-05-03T01:00:54.967 回答