在指令中测试 .on 预期的间谍获得了功能



我正在尝试通过 .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();

相关内容

  • 没有找到相关文章

最新更新