Я нашел проблему тестирования анимации JQuery. Проблема в том, что в режиме jasmine.Clock.useMock()
JQuery не вызывает функцию complete
после выполнения эффекта.Jasmine Clock mocking и функция «полного» эффекта JQuery не идет хорошо Хорошо
Логика:
$('#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()
.
Спасибо за предложение, но выполнение '$ .fx.off = true' также не вызывает функцию' complete'. Хотя это действительно полезно в других случаях. – vkovalskiy
Ссылка на упомянутую проблему GitHub была бы полезна. https://github.com/pivotal/jasmine/issues/184 –