Jasmine Clock模拟和JQuery效果'完整'功能并不顺利

时间:2012-02-04 15:06:25

标签: jquery bdd jasmine jasmine-jquery

我发现测试JQuery动画时遇到问题。问题是在jasmine.Clock.useMock()模式期间,JQuery在效果执行后不会调用complete函数。

逻辑:

$('#mydiv').fadeOut('normal', function () {
    // this is called AFTER the test ends
    // but should be called after jasmine.Clock.tick(1000);
    $(this).remove();
})

规格:

it('should pass', function () {
    jasmine.Clock.useMock();
    // call logic
    jasmine.Clock.tick(1000);
    // using jasmine-jquery matcher
    expect($('#mydiv')).not.toExist();
})

测试失败并显示以下消息:

Expected '<div id="mydiv" style="opacity: 0; "></div>' not to exist.

这意味着效果正确结束,但未调用complete函数。它实际上是在测试运行器完成执行后调用的。

我不确定向JQuery或Jasmine开发人员报告是否存在错误。也许有人会建议解决方法。

我的目标是在逻辑执行后测试该元素被删除,所以我需要not.toExist()匹配器。

2 个答案:

答案 0 :(得分:3)

请在您的github问题上查看答案。 jQuery效果和Jasmine的模拟时钟不兼容。

答案 1 :(得分:0)

我是0.00001%,因为我正在使用骨干与原型 - 但我将其添加到我的SpecHelper.js文件中以绕过我正在使用的剧本效果并确保我的回调被执行。

我确信你可以对jquery采用相同的方法。

beforeEach(function() {
  // Override scriptaculous effects so we can ensure our afterFinish
  // callbacks are executed.
  var effects = [
    'Appear', 'BlindDown', 'BlindUp', 'DropOut', 'Fade', 'Fold',
    'Grow', 'Highlight', 'Morph', 'Move', 'Opacity', 'Puff',
    'Pulsate', 'Scale', 'ScrollTo', 'Shake', 'Shrink', 'SlideDown',
    'SlideUp', 'Squish', 'SwitchOff', 'Tween'
  ];
  effects.each(function(name){
    Effect[name] = function(el, options) {
      options = options || (options = {});
      expect(el).toExist();
      if(options['afterFinish']) options['afterFinish']();
    }
  });
});