javascript - 如何在 Jasmine 单元测试中使用 Sinon 模拟 jQuery 动画?

标签 javascript unit-testing jquery-animate jasmine sinon

我有一个 1 秒的 jQuery .animate Action ,它在页面加载后 5 秒启动。我在我的 Jasmine 单元测试代码中设置了一个 Sinon 计时器,并在 7 秒后进行测试,以查看后动画属性是否符合预期。

它不能正常工作,所以我在我的 Jasmine HTML 测试页面上放置了一个动画实例,以便更好地查看发生了什么。

  • 在 Firefox 和 Chrome 中,页面加载,动画函数被调用,单元测试立即失败,然后(也是立即)动画可见。

  • 在 IE、Opera 和 Safari 中,页面加载,动画函数被调用,单元测试立即失败,动画永远不会出现。

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

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

查看Sinon's documentation ,它的假定时器涵盖以下过程: setTimeout, clearTimeout, setInterval, clearInterval, 日期

我不知道 jQuery 的动画是如何工作的,但我想它是使用 CSS 进行过渡,而 Sinon 的 useFakeTimers 中没有涵盖 CSS 过渡,所以我想这就是问题所在。但是,如果我对问题的看法是正确的,我仍然需要一个解决方案。

也许我应该试试诗乃以外的东西? Jasmine 的 waits() 在此测试中表现完美,但对于像我这样不耐烦的人来说非常不切实际。

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

最佳答案

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

jQuery.fx.off = true

这不会解决您最初 7 秒等待事件触发的问题,但这确实意味着您可以测试 DOM 是否已按预期更改。

关于javascript - 如何在 Jasmine 单元测试中使用 Sinon 模拟 jQuery 动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7324043/

相关文章:

c++ - C++ FakeIt 库多重继承

php - 在 PHPUnit 中模拟时在回调中通过引用传递

jQuery:动画文本颜色

javascript - 我应该如何根据值对背景渐变进行动画处理?

javascript - 为网站创建用户生成的文本

javascript - React hooks 回调接收过时状态

javascript - 通过 node.js 将字符串传递给 shell 脚本的标准输入

c# - 使用 C# 测试 C++ 代码时的代码覆盖率

javascript - 不要让用户点击图片太多次

javascript - Yeoman/Grunt 和 Grunticon 工作流程