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();
});
});
});