Skip to content

Commit 702fe87

Browse files
koddssonkeithamus
andcommitted
Add tests for the different strategies
Co-authored-by: Keith Cirkel <keithamus@users.noreply.github.com>
1 parent 8e9da7d commit 702fe87

1 file changed

Lines changed: 67 additions & 30 deletions

File tree

test/lazy-define.ts

Lines changed: 67 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -30,41 +30,78 @@ describe('addStrategy', () => {
3030
})
3131

3232
describe('lazyDefine', () => {
33-
it('scans the whole document on first call', async () => {
34-
const onDefine = spy()
35-
lazyDefine('scan-document-test', onDefine)
36-
await fixture(html`<scan-document-test></scan-document-test>`)
33+
describe('ready strategy', () => {
34+
it('calls define for a lazy component', async () => {
35+
const onDefine = spy()
36+
lazyDefine('scan-document-test', onDefine)
37+
await fixture(html`<scan-document-test></scan-document-test>`)
3738

38-
await new Promise<unknown>(resolve => requestAnimationFrame(resolve))
39+
await new Promise<unknown>(resolve => requestAnimationFrame(resolve))
3940

40-
expect(onDefine).to.be.callCount(1)
41+
expect(onDefine).to.be.callCount(1)
42+
})
43+
44+
it('initializes dynamic elements that are defined after the document is ready', async () => {
45+
const onDefine = spy()
46+
await fixture(html`<later-defined-element-test></later-defined-element-test>`)
47+
lazyDefine('later-defined-element-test', onDefine)
48+
49+
await new Promise<unknown>(resolve => requestAnimationFrame(resolve))
50+
51+
expect(onDefine).to.be.callCount(1)
52+
})
53+
54+
it("doesn't call the same callback twice", async () => {
55+
const onDefine = spy()
56+
lazyDefine('twice-defined-element', onDefine)
57+
lazyDefine('once-defined-element', onDefine)
58+
lazyDefine('twice-defined-element', onDefine)
59+
await fixture(html`
60+
<once-defined-element></once-defined-element>
61+
<once-defined-element></once-defined-element>
62+
<once-defined-element></once-defined-element>
63+
<twice-defined-element></twice-defined-element>
64+
<twice-defined-element></twice-defined-element>
65+
<twice-defined-element></twice-defined-element>
66+
<twice-defined-element></twice-defined-element>
67+
`)
68+
69+
await new Promise<unknown>(resolve => requestAnimationFrame(resolve))
70+
71+
expect(onDefine).to.be.callCount(2)
72+
})
4173
})
42-
it('initializes dynamic elements that are defined after the document is ready', async () => {
43-
const onDefine = spy()
44-
await fixture(html`<later-defined-element-test></later-defined-element-test>`)
45-
lazyDefine('later-defined-element-test', onDefine)
4674

47-
await new Promise<unknown>(resolve => requestAnimationFrame(resolve))
75+
describe('firstInteraction strategy', () => {
76+
it('calls define for a lazy component', async () => {
77+
const onDefine = spy()
78+
lazyDefine('scan-document-test', onDefine)
79+
await fixture(html`<scan-document-test data-load-on="firstInteraction"></scan-document-test>`)
4880

49-
expect(onDefine).to.be.callCount(1)
81+
await new Promise<unknown>(resolve => requestAnimationFrame(resolve))
82+
expect(onDefine).to.be.callCount(0)
83+
84+
document.dispatchEvent(new Event('mousedown'))
85+
86+
await new Promise<unknown>(resolve => requestAnimationFrame(resolve))
87+
expect(onDefine).to.be.callCount(1)
88+
})
5089
})
51-
it("doesn't call the same callback twice", async () => {
52-
const onDefine = spy()
53-
lazyDefine('twice-defined-element', onDefine)
54-
lazyDefine('once-defined-element', onDefine)
55-
lazyDefine('twice-defined-element', onDefine)
56-
await fixture(html`
57-
<once-defined-element></once-defined-element>
58-
<once-defined-element></once-defined-element>
59-
<once-defined-element></once-defined-element>
60-
<twice-defined-element></twice-defined-element>
61-
<twice-defined-element></twice-defined-element>
62-
<twice-defined-element></twice-defined-element>
63-
<twice-defined-element></twice-defined-element>
64-
`)
65-
66-
await new Promise<unknown>(resolve => requestAnimationFrame(resolve))
67-
68-
expect(onDefine).to.be.callCount(2)
90+
describe('visible strategy', () => {
91+
it('calls define for a lazy component', async () => {
92+
const onDefine = spy()
93+
lazyDefine('scan-document-test', onDefine)
94+
await fixture(
95+
html`<div style="height: calc(100vh + 256px)"></div>
96+
<scan-document-test data-load-on="visible"></scan-document-test>`
97+
)
98+
await new Promise<unknown>(resolve => requestAnimationFrame(resolve))
99+
expect(onDefine).to.be.callCount(0)
100+
101+
document.documentElement.scrollTo({top: 10})
102+
103+
await new Promise<unknown>(resolve => requestAnimationFrame(resolve))
104+
expect(onDefine).to.be.callCount(1)
105+
})
69106
})
70107
})

0 commit comments

Comments
 (0)