我试图在包含使用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
我试图测试页面标题是否更改为新标题。这是我的Jasmine规范:
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
,这样动画持续时间就会变为零(尽管实际上它更像16ms来获得下一个动画帧)。 / p>
我已经在动画运行之前验证$.Velocity.mock
确实是真的,并且当单独运行spec文件时,这很好用,但是当运行我的整个套件时,它会测试一些不同的动画,其中几个总是失败。
我尝试使用setTimeout
而不是sinon的假定时器,我已经尝试将时钟滴答设置为非常大的数字(例如100000),而且我已经尝试过。 ve还在相关动画之前添加了$.Velocity.mock
,但这些都没有解决问题。
失败如下:
Failure/Error: Expected '<div class="page-title velocity-animating">Old Title</div>' to contain html 'New Title'.
速度动画类就在那里,动画的complete
回调从未被调用过。
答案 0 :(得分:1)
mock不仅要在动画运行之前,而且在开始任何动画调用之前都必须是true
。
另外,只是为了更好的衡量标准 - 虽然你已经知道了:速度调用仍然与模拟异步(因为它在下一个rAF标记上)
除此之外,我不确定。如果你给我看了一个剥离的codepen.io笔,我可能会更有用:)P.S。我不使用茉莉花,而是使用茉莉花