我似乎无法在我的Jasmine测试中监视setTimeout和clearTimeout,这些测试正在通过Karma运行.
我尝试了所有这些的变化
spyOn(window,'setTimeout').and.callFake(()=>{}); spyOn(global,'setTimeout').and.callFake(()=>{}); spyOn(window,'clearTimeout').and.callThrough(); clock = jasmine.clock(); clock.install(); spyOn(clock,'setTimeout').and.callThrough(); runMyCode(); expect(window.setTimeout).toHaveBeenCalled(); // no expect(global.setTimeout).toHaveBeenCalled(); // nope expect(window.clearTimeout).toHaveBeenCalled(); // no again expect(clock.setTimeout).toHaveBeenCalled(); // and no
在每种情况下,我都可以确认在runMyCode中已经调用了setTimeout和clearTimeout,但是我总是调用预期的spy setTimeout.
对于窗口,显然这是因为测试和跑步者(Karma窗口)在不同的帧中(所以为什么我应该期待任何不同的).但正因为如此,我无法确定是否有任何方法可以确认这些全局函数已被调用.
我知道我可以使用jasmine.clock()来确认已经调用了超时/间隔回调,但看起来我看不到setTimeout本身.并确认简单地调用clearTimeout是不可能的.
在这一点上,我唯一能想到的是添加一个单独的抽象层来包装setTimeout和clearTimeout或者将函数作为依赖项注入,我以前做过,但我觉得很奇怪.
解决方法
原文地址:https://www.jb51.cc/js/156603.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。