在指令中测试 .on 预期间谍获得功能
Testing .on in directive expected spy got function
我正在尝试通过 .on 在我的指令中测试来自 $broadcast(来自控制器)的接收器。
指令:
describe('<-- myDirective Spec ------>', function () {
var scope, $compile, element, $httpBackend, rootScope;
beforeEach(angular.mock.module('myApp'));
beforeEach(inject(function (_$rootScope_, _$compile_, _$httpBackend_) {
scope = _$rootScope_.$new();
$compile = _$compile_;
$httpBackend = _$httpBackend_;
rootScope = _$rootScope_;
var html = '<my-directive></my-directive>';
element = $compile(angular.element(html))(scope);
spyOn(scope, '$broadcast').and.callThrough();
scope.$digest();
}));
it('should be defined', function () {
expect(element).toBeDefined();
});
it('should broadcast ', function () {
scope.$broadcast('sendEmail');
expect(scope.$on).toHaveBeenCalledWith('sendEmail', jasmine.any(Function));
});
});
通过以上,我得到错误:
Expected a spy, but got Function.
更新:
您可以简单地测试您的 $broadcast 是否被调用
expect(scope.$broadcast).toHaveBeenCalled()
或实际测试 $on 做类似
的事情
scope.$on('sendEmail', spyFunction)
expect(spyFunction).toHaveBeenCalledWith('sendEmail')
原因:$broadcast 实际上并没有调用 $on 函数。 $on 是一个侦听器,它在侦听事件(第一个参数)时调用回调函数(作为第二个参数传递)。
您目前正在监视作用域的 $broadcast 函数,并对 $on 函数进行了测试。您需要更换
spyOn(scope, '$broadcast').and.callThrough();
来自
spyOn(scope, '$on').and.callThrough();
我正在尝试通过 .on 在我的指令中测试来自 $broadcast(来自控制器)的接收器。
指令:
describe('<-- myDirective Spec ------>', function () {
var scope, $compile, element, $httpBackend, rootScope;
beforeEach(angular.mock.module('myApp'));
beforeEach(inject(function (_$rootScope_, _$compile_, _$httpBackend_) {
scope = _$rootScope_.$new();
$compile = _$compile_;
$httpBackend = _$httpBackend_;
rootScope = _$rootScope_;
var html = '<my-directive></my-directive>';
element = $compile(angular.element(html))(scope);
spyOn(scope, '$broadcast').and.callThrough();
scope.$digest();
}));
it('should be defined', function () {
expect(element).toBeDefined();
});
it('should broadcast ', function () {
scope.$broadcast('sendEmail');
expect(scope.$on).toHaveBeenCalledWith('sendEmail', jasmine.any(Function));
});
});
通过以上,我得到错误:
Expected a spy, but got Function.
更新:
您可以简单地测试您的 $broadcast 是否被调用
expect(scope.$broadcast).toHaveBeenCalled()
或实际测试 $on 做类似
的事情scope.$on('sendEmail', spyFunction)
expect(spyFunction).toHaveBeenCalledWith('sendEmail')
原因:$broadcast 实际上并没有调用 $on 函数。 $on 是一个侦听器,它在侦听事件(第一个参数)时调用回调函数(作为第二个参数传递)。
您目前正在监视作用域的 $broadcast 函数,并对 $on 函数进行了测试。您需要更换
spyOn(scope, '$broadcast').and.callThrough();
来自
spyOn(scope, '$on').and.callThrough();