Jasmine Clock mocking и функция «complete» JQuery не подходят - PullRequest
1 голос
/ 04 февраля 2012

Я обнаружил проблему при тестировании анимации 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();
})

Spec:

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() matcher.

Ответы [ 2 ]

3 голосов
/ 11 февраля 2012

Пожалуйста, посмотрите ответ на ваш вопрос GitHub. Эффекты jQuery и фиктивные часы Жасмин не совместимы.

0 голосов
/ 09 июня 2012

Я 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']();
    }
  });
});
...