0

AngularJS 単体テストを行っており、Karma - Coverage を使用して結果を確認しています。これが私のコードです。

todomvc.directive('todoBlur', function () {
  return function (scope, elem, attrs) {
    elem.bind('blur', function () {
        scope.$apply(attrs.todoBlur);
    });

    scope.$on('$destroy', function () {
        elem.unbind('blur');
    });
  };
});

以下のテストケースを書きました。

describe('TodoBlur', function() {
  var $compile,
    $rootScope;
  beforeEach(module('todomvc'));
  beforeEach(inject(function(_$compile_, _$rootScope_){
    $compile = _$compile_;
    $rootScope = _$rootScope_;
  }));


  it('T', function() {
    var element = $compile("<todoBlur></todoBlur>")($rootScope);
    $rootScope.$digest();
    element.blur();
    var e = $.Event('keydown');
    e.which = 27;
    $rootScope.trigger(e);
    element.triggerHandler('keydown', 27);
    element.triggerHandler('keydown', 28);
  });
});

ご覧のとおり、テストするために多くのコードを試しましたkeydownが、どれも機能しません。コード カバレッジ レポートの結果は変わりません。どうすればテストできますか?私は AngularJS とその単体テストが初めてで、Google で検索してもまだ解決策が見つかりません。

編集: Angular ディレクティブ クリック ハンドラーの単体テストを試み、コードを変更しました。しかし、それでもうまくいきません。

beforeEach(module('todomvc'));
describe('myCtrl', function () {

  var $scope, $rootScope;

  beforeEach(inject(function ($controller, _$rootScope_) {
    $scope = $rootScope.$new();
    $controller('myCtrl', { $scope: $scope });
    $rootScope = _$rootScope_;
  }));

  describe('T', function () {

    var element;

    beforeEach(function () {
        element = angular.element('<todoBlur/>');
        $compile(element)(scope);
        $scope.$digest();
    });


  });
});
4

0 に答える 0