Javascript Jasmine规格在Velocity.js动画中失败,$.Velocity.mock=true
我正在尝试在一些包含使用Velocity.js构建的动画的函数上运行一些Jasmine规范 方法如下所示:Javascript Jasmine规格在Velocity.js动画中失败,$.Velocity.mock=true,javascript,coffeescript,jasmine,sinon,velocity.js,Javascript,Coffeescript,Jasmine,Sinon,Velocity.js,我正在尝试在一些包含使用Velocity.js构建的动画的函数上运行一些Jasmine规范 方法如下所示: @changeTitle = (e, data) -> newTitle = data.title $pageTitle = @select("pageTitleSelector") $pageTitle.velocity opacity: 0 , duration: 750 complete: -> $pageTitle.text(n
@changeTitle = (e, data) ->
newTitle = data.title
$pageTitle = @select("pageTitleSelector")
$pageTitle.velocity
opacity: 0
,
duration: 750
complete: -> $pageTitle.text(newTitle)
.velocity
opacity: 1
duration: 800
Failure/Error: Expected '<div class="page-title velocity-animating">Old Title</div>' to contain html 'New Title'.
我试图测试页面的标题是否更改为新标题。这是我的茉莉花规格:
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
,以便动画持续时间变为零(尽管实际上获得下一个动画帧更像是16毫秒)
在动画运行之前,我已经验证了$.Velocity.mock
确实是正确的,并且当单独运行spec文件时,效果很好,但是当运行我的整个套件(测试几个不同的动画)时,其中一些总是失败
我尝试过使用setTimeout
而不是sinon的假计时器,我尝试过将时钟滴答声设置为一个非常大的数字(例如100000),并且我还在相关动画之前添加了$.Velocity.mock
,但这些都不能解决问题
故障如下所示:
@changeTitle = (e, data) ->
newTitle = data.title
$pageTitle = @select("pageTitleSelector")
$pageTitle.velocity
opacity: 0
,
duration: 750
complete: -> $pageTitle.text(newTitle)
.velocity
opacity: 1
duration: 800
Failure/Error: Expected '<div class="page-title velocity-animating">Old Title</div>' to contain html 'New Title'.
失败/错误:预期“旧标题”包含html“新标题”。
velocity动画类在那里,动画的
complete
回调从未被调用。mock必须是true
,不仅在动画运行之前,而且在开始任何动画调用之前
另外,为了更好的衡量——尽管您可能已经知道:velocity调用仍然与mock异步(因为它在下一次rAF测试中)
除此之外,我不确定。如果你给我看一支简陋的codepen.io笔,我会更有用处:)
p、 我不使用茉莉花,但很遗憾,这似乎没有帮助。我将
console.log($.Velocity.mock)
放在代码库中每个Velocity调用的前面,每次它都返回true(我使用requirejs垫片将$.Velocity.mock
设置为true)。另外,我的测试运行程序使用PhantomJS,它本机不支持rAF,所以据我所知,它只是使用一个普通的旧setTimeout,如果它使用setTimeout,它仍然是异步的。