指令
link(scope, element, attrs, ctrl) {
element.mouseover(function() {
$(element).tooltip('show');
});
$(element).hover(MuiBootstrap.adjustTooltips);
}
茉莉花测试
it('should show tooltip on mouseover', function () {
var spy = spyOn(element, 'mouseover');
$(element).trigger('mouseover');
expect(spy).toHaveBeenCalled();
});
以上的茉莉花测试失败了 错误:未被捕获的预期间谍工具提示已被调用。
答案 0 :(得分:0)
由于你试图窥探在mouseover
函数中只调用一次的link
方法,并且在调用此方法之后安装spy - 安装的那一刻,它将无法工作间谍间谍功能已经被调用,所以间谍不知道这一点
我建议不要测试mouseover
本身是否被调用,但是如果在触发事件时调用了mouseover
回调 - 你实际上是因为你监视tooltip
方法而做的(你的错误信息表明你窥探工具提示方法)。因此,只需删除此测试即可。我假设你想测试是否调用了mouseover回调而不是调用了mouseover
方法 - 这两个是不一样的。
回答更新 要测试mouseover回调,您可以在指令范围上定义此回调:
link(scope, element, attrs, ctrl) {
scope.mouseoverCallback = function() {
$(element).tooltip('show');
};
element.mouseover(scope.mouseoverCallback);
}
然后直接在其上安装spy:
it('should call mouseover callback', function () {
var yourDirectiveScope = element.scope();
var spy = spyOn(yourDirectiveScope, 'mouseoverCallback').and.callThrough();
element.triggerHandler('mouseover');
expect(yourDirectiveScope.mouseoverCallback).toHaveBeenCalled();
});