Обзор
Элементы DOM, которые динамически визуализируются в dom-if
, dom-repeat
<templates>
, кажутся рендерингом асинхронно, что делает модульное тестирование немного болезненным.
Полимерный компонент
template(is='dom-if', if='{{!defaultPrintAll}}')
template(is='dom-repeat', items='{{_pageBucketItems}}')
button(type='button', class$='{{_computeDefaultClass(item)}}', on-tap='_togglePageClick') {{item}}
Тест
test("Clicking 'Export All' to off, reveals board-selection tiles", function() {
$("#export-pdf-checkbox-all").siblings(".checkbox").trigger("click");
Polymer.dom.flush()
expect($(".board-range__button")).to.be.visible;
});
Почему это кажется неудачным:
При нажатии кнопки, которая запускает dom-if
/dom-repeat
, элементы не отображаются в синхронном порядке.
dom-if
и последующие/вложенныеdom-repeat
отображаются асинхронно.Что еще хуже, сам
button
получает свой класс вычисляемым/связанным образом (обратите внимание наclass$=
наbutton
).
Итак, вопрос сводится к следующему:
Можно ли принудительно отобразить dom-if
, dom-repeat
и вычисляемую привязку класса в синхронном порядке после того, как я имитирую нажатие на кнопку, которая активирует все 3 из эти условия?
Примечания:
- Я использую официальный WCT Polymer в качестве тестовой системы.
- Я также использую chai-jquery.
- Я также использовал
Polymer.dom.flush()
, но он все еще не смылся. - Я знаю, что вместо этого я могу использовать
chai-as-promised.js
, но это усложняет мои тесты для таких тривиальных вопросов, как этот, поэтому я хотел бы избежать этого.