我正在尝试在一些包含用 Velocity.js 构建的动画的函数上运行一些 Jasmine 规范
该方法如下所示:
@changeTitle = (e, data) ->
newTitle = data.title
$pageTitle = @select("pageTitleSelector")
$pageTitle.velocity
opacity: 0
,
duration: 750
complete: -> $pageTitle.text(newTitle)
.velocity
opacity: 1
duration: 800
我正在尝试测试页面的标题是否更改为新标题。这是我的茉莉花规格:
describe 'submit uiTitleChange', ->
it 'changes the title', ->
@clock = sinon.useFakeTimers()
@component.trigger "uiTitleChange", {title: "New Title"}
@clock.tick(16)
expect(@component.select("pageTitleSelector")).toContainHtml "New Title"
@clock.restore()
现在,我使用 requirejs,并$.Velocity.mock = true
在任何测试之前添加一个 shim,以便动画持续时间变为零(尽管实际上它更像是 16 毫秒来获取下一个动画帧)。
我已经在动画运行之前验证了这$.Velocity.mock
确实是真的,当单独运行规范文件时,这工作得很好,但是当运行我的整个套件时,它测试了几个不同的动画,其中一些总是失败。
我尝试使用setTimeout
而不是 sinon 的假计时器,我尝试将时钟滴答设置为一个非常大的数字(例如 100000),并且我还在$.Velocity.mock
相关动画之前添加了这些,但这些都不能解决问题。
失败看起来像这样:
Failure/Error: Expected '<div class="page-title velocity-animating">Old Title</div>' to contain html 'New Title'.
速度动画类在那里,动画的complete
回调从未被调用过。