我现在使用的是Lit Framework,但我认为这种情况也会发生在常规的Web组件上。
我的connectedCallback
是async
,但是,对于Lit fixture
,我认为它不会等到connectedCallback
完成,所以我的状态更改发生在测试完成之后。
作为一种变通方法,我在connectedCallback
的末尾放了一个this.dispatchEvent(new Event('cc-completed')
。
@customElement('my-lit-element')
export default class MyLitElement extends LitElement {
override async connectedCallback() {
super.connectedCallback();
await this.loadStuff(); // Also changes state
this.dispatchEvent(new Event('cc-completed'));
}
}
然后:
it('My Lit Element Test #1', async () => {
const myLitElement: MyLitElement = await fixture(html`
<my-lit-element .prop=${"prop"}></my-lit-element>
`);
myLitElement.addEventListener('cc-completed', () => {
// asserts
});
}).timeout(5000);
然而,这只适用于调试和断点,因为否则测试将结束,回调将被挂起。
做这件事的正确方法是什么?
1条答案
按热度按时间31moq8wy1#
对于同步更新请求(如设置React式属性),执行
await myLitElement.updateComplete
就足够了。但是,如果在
connectedCallback
中引起更新的是异步的,那么唯一的方法就是轮询您要查找的某个结果。Open-WC在
@open-wc/testing
包中提供了一些测试工具。waitUntil
允许您提供一个通用 predicate 函数和一些选项,如interval和timeout。oneEvent
允许您等待事件的触发,如第二个示例中触发的事件。在测试中,一种可能的解决方案是,您还可以将超时作为
waitUntil
的options
参数传递: