茉莉花规格失败,Velocity.js动画为$ .Velocity.mock = true

时间:2015-02-19 17:59:31

标签: 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(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回调从未被调用过。

1 个答案:

答案 0 :(得分:1)

mock不仅要在动画运行之前,而且在开始任何动画调用之前都必须是true

另外,只是为了更好的衡量标准 - 虽然你已经知道了:速度调用仍然与模拟异步(因为它在下一个rAF标记上)

除此之外,我不确定。如果你给我看了一个剥离的codepen.io笔,我可能会更有用:)

P.S。我不使用茉莉花,而是使用茉莉花