Я пытаюсь протестировать простые манипуляции с DOM и столкнуться с некоторыми проблемами. Представьте себе следующее простое событие щелчка:Утилизация текстовых манипуляций в DOM с использованием jQuery
$('.js-click-me').on('click', function(e) {
e.preventDefault();
$('.some-span').text('changed text');
});
Теперь же представьте, что мой HTML содержит следующее:
<span class="some-span">Original Text</span>
<button class="js-click-me">Click Me</button>
Хорошо, так что теперь у меня есть блок тестирует
describe('text change test', function() {
it('The text of .some-span should change when button is clicked', function() {
assert.equal('Original Text', $('.some-span').text());
$('.js-click-me').click();
assert.equal('changed text', $('.some-span').text());
});
});
Я ожидаю, что первое утверждение будет проходить, потому что исходный текст, по сути, «Исходный текст» (это делается только для установки базовой линии и, возможно, не требуется).
Второе утверждение, которое я ожидаю пройти, потому что после щелчка он меняет текст с «Исходный текст» на «измененный текст». Однако, когда я запускаю такие тесты, второе утверждение терпит неудачу, потому что тест запускает сразу после и DOM еще не обновил текст.
Я могу добавить второе испытание в обертку setTimeout
, но это не кажется правильным или эффективным.
Любые советы по этому вопросу?
Я хочу отметить, что «щелчок» - это просто простой пример. Я хочу проверить все возможные способы изменения текста, включая часть вызываемой функции. –
Событие, вызванное вызовом '$ (..). Click()' обрабатывается синхронно. Вы проверили ручную проверку того, что ваш DOM на самом деле был изменен, но ваш тест просто не подбирает его? – Louis
Да. Это не всегда событие щелчка, которое я использую для запуска этого изменения DOM. Если я предупрежу о текстовом значении, это будет правильно. Я думаю, что те, которые не используют .find() и .children(), более эффективны, поэтому они меняются без задержки, а те, которые требуют тайм-аута. –