Jasmine不适用于文档点击的链接指令

时间:2016-06-13 08:07:51

标签: javascript angularjs jasmine directive spy

我的指令链接功能如下 -

link:function(scope,elem,attr){
            $(document).on("click",function(event){
                var target = $(event.target);
                if(target.is('.detailBox') || target.closest('.detailBox').length){
                    return;
                }
                scope.$emit('closeDetailBox');
                scope.$apply();
            });
        }

我的用于测试发射的茉莉花TC如下 -

it('Some other box click', function () {
            spyOn($rootScope, '$emit');
            var theboxelement = '<button class="thebox"></button>';
            var thebox = $(theboxelement);
            $('body').append(thebox);
            var spyEvent = spyOnEvent('.thebox', 'click');

            thebox.trigger("click");
            expect($rootScope.$emit).toHaveBeenCalledWith('closeDetailBox',theboxelement);
            thebox.remove();
        });

应该触发并捕获emit事件,但它从未被触发过。我得到了错误 - “预期的间谍$ emit已被调用['closeDetailBox',''],但它从未被调用过。”

我从2天开始处理这个问题,无法得到修复,请帮助!

2 个答案:

答案 0 :(得分:2)

根据您的代码,我认为您需要调用链接功能。然后做其余的事。像mydirective.link();这将解决您进行的以下函数调用。

如果以上项目不起作用,您可以检查以下项目 -

查看您的模块依赖关系是否正确解析。

利用本地茉莉花调试。这可能是检查流量的最简单方法。

答案 1 :(得分:0)

根据您的指令,您的事件将从您的指令范围发出。你确定这会触发$ rootScope的$ emit函数吗?

也许你应该在$ rootScope上使用$ broadcast?