Javascript Jasmine规格在Velocity.js动画中失败,$.Velocity.mock=true

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

我正在尝试在一些包含使用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
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,它仍然是异步的。