概要
dom-if
内で動的にレンダリングされる DOM 要素は、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
ください)。
したがって、質問はこれに要約されます。
これらの条件の 3 つすべてをアクティブにするボタンへのクリックをシミュレートした後、クラスの、、および計算されたバインディングを同期順序で強制的にレンダリングすることは可能ですか?dom-if
dom-repeat
ノート:
- テスト ハーネスとして Polymer の公式 WCT を使用しています。
- 私もchai-jqueryを使っています。
- 私も使用しまし
Polymer.dom.flush()
たが、まだ使用していません。 - 代わりに使用できることは承知しています
chai-as-promised.js
が、このような些細な問題のテストに不必要な複雑さが追加されるため、避けたいと思います。