这是要走的路https://github.com/vojtajina/ng-directive-testing
基本上,您使用beforeEach
创建、编译和公开元素及其作用域,然后模拟作用域更改和事件处理程序,并查看代码是否做出反应并适当地更新元素和作用域。这是一个非常简单的例子。
假设:
scope: {
myPerson: '='
},
link: function(scope, element, attr) {
element.bind('click', function() {console.log('testes');
scope.$apply('myPerson = "clicked"');
});
}
我们期望当用户点击带有指令的元素时,myPerson
属性变为clicked
. 这是我们需要测试的行为。所以我们将编译后的指令(绑定到一个元素)暴露给所有规范:
var elm, $scope;
beforeEach(module('myModule'));
beforeEach(inject(function($rootScope, $compile) {
$scope = $rootScope.$new();
elm = angular.element('<div t my-person="outsideModel"></div>');
$compile(elm)($scope);
}));
然后你就断言:
it('should say hallo to the World', function() {
expect($scope.outsideModel).toBeUndefined(); // scope starts undefined
elm.click(); // but on click
expect($scope.outsideModel).toBe('clicked'); // it become clicked
});
戳这里。你需要 jQuery 来进行这个测试,来模拟click()
.