如何在Jasmine单元测试中使用Sinon伪造jQuery动画?

gcd*_*dev 13 javascript unit-testing jasmine sinon jquery-animate

我有一秒钟的jQuery .animate动作,在页面加载后5秒启动.我在我的Jasmine单元测试代码中设置了一个Sinon计时器,并在7秒钟后测试,以查看动画后属性是否应该如此.

它不能正常工作,所以我在我的Jasmine HTML测试页面上放置了一个动画实例,以便更好地了解正在发生的事情.

  • 在Firefox和Chrome中,页面加载,动画函数被调用,单元测试立即失败,然后(也立即)动画明显发生.

  • 在IE,Opera和Safari中,页面加载,动画函数被调用,单元测试立即失败,动画永远不会明显发生.

我希望的是以下(在所有浏览器中):

  • 页面加载,动画函数被调用,动画瞬间完成,单元测试立即成功.

综观兴农的文档,这是假的定时器包括以下过程: setTimeout,clearTimeout,setInterval,clearInterval,Date

我不知道jQuery的动画是如何工作的,但是我想它是使用CSS来转换,而且Sinon的CSS转换并没有涵盖useFakeTimers,所以我想这就是问题所在.但是,如果我对这个问题是正确的,我仍然需要一个解决方案.

也许我应该尝试除了诗乃之外的东西?Jasmine waits()在这个测试中的表现非常出色,但对于像我这样的不耐烦的人来说却是非常不切实际的.

还有其他建议吗?请记住,我是JS单元测试的新手,所以模糊的答案会让我更加困惑,而不是帮助我.; O)

Der*_*ins 20

您可以使用jQuery off来关闭jQuery效果:

jQuery.fx.off = true
Run Code Online (Sandbox Code Playgroud)

这不会解决您的事件发生的第7秒等待的问题,但它确实意味着您可以测试DOM已按预期更改.