我正在尝试测试一个名为watch
的函数,它看起来类似于:
function watch(interaction) {
$(document).on(interaction.event, interaction.selector, function() {
...
});
}
我的想法是监视$(document).on()
并检查它是否与我传递的参数一起调用:
it('should watch events on DOM elements', function() {
var $doc = $(document);
spyOn($doc, 'on');
watch({ event: 'click', selector: '#foo' });
expect($doc.on).toHaveBeenCalledWith('click', '#foo', jasmine.any(Function));
});
然而,贾斯敏告诉我,$doc.on
从未被调用过。我的想法是,这是因为测试中的$doc
引用了与$(document)
在watch()
中不同的实例。
如果是这样的话,我如何测试以确保watch()
正在正确地连接$(document).on()
?
发布于 2014-07-09 02:51:55
您可以模拟$
,这样调用它就可以使用相同的.on
模拟方法返回相同的对象。这是有意义的,因为您不想测试jQuery本身。
我还没有嘲笑过茉莉花,所以我不能提供一个具体的例子。您可能想看看jest,它构建在Jasmine之上,默认情况下模拟每个模块:https://facebook.github.io/jest。
https://stackoverflow.com/questions/24634832
复制相似问题