如何在指令的单元测试中检查$emit是否被调用?
我的指令非常简单(为了说明):
angular.module('plunker', [])
.directive('uiList', [function () {
return {
scope: {
lengthModel: '=uiList',
},
link: function (scope, elm, attrs) {
scope.$watch('lengthModel', function (newVal) {
scope.$emit('yolo');
});
}
}
}])
每当uiList属性改变时,它都会触发该事件。 以下是我的单元测试代码:
describe('Testing $emit in directive', function() {
var scope;
var element;
//you need to indicate your module in a test
beforeEach(function () {
module('plunker');
inject(function ($rootScope, $compile) {
scope = $rootScope.$new();
scope.row= 1;
spyOn(scope,'$emit');
element = angular.element('<ul id="rows" ui-list="row">');
$compile(element)(scope);
});
});
it('should emit', function() {
scope.$digest();
scope.row = 2;
scope.$digest();
expect(scope.$emit).toHaveBeenCalledWith("yolo");
});
});
这总是会给我一个错误,指出 scope.$emit 从未被调用过。 scope 有问题吗?请有人帮忙吗?
Plunker: http://plnkr.co/edit/AqhPwp?p=preview