-
-
Notifications
You must be signed in to change notification settings - Fork 2.4k
/
index.test.ts
73 lines (59 loc) · 2.14 KB
/
index.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import { flushPromises } from '@vue/test-utils'
import { describe, expect, it, vi } from 'vitest'
import { ref } from 'vue-demi'
import { useElementVisibility } from '../useElementVisibility'
import { useInfiniteScroll } from '.'
vi.mock('../useElementVisibility')
describe('useInfiniteScroll', () => {
it('should be defined', () => {
expect(useInfiniteScroll).toBeDefined()
})
it.each([
[ref(givenMockElement())],
[givenMockElement()],
[document],
[window],
])('should calls the loadMore handler, when element is visible', (target) => {
const mockHandler = vi.fn()
givenElementVisibilityRefMock(true)
useInfiniteScroll(target, mockHandler)
expect(mockHandler).toHaveBeenCalledTimes(1)
})
it('should calls the loadMore handler, when element visibility state form hidden to visible', async () => {
const mockHandler = vi.fn()
const mockElement = givenMockElement()
const visibilityRefMock = givenElementVisibilityRefMock(false)
useInfiniteScroll(mockElement, mockHandler)
expect(mockHandler).not.toHaveBeenCalled()
visibilityRefMock.value = true
await flushPromises()
expect(mockHandler).toHaveBeenCalledTimes(1)
})
it('should call the loadMore handler, when user scrolls', async () => {
const mockElementScrollHeight = 100
const mockHandler = vi.fn()
const mockElement = givenMockElement({
scrollHeight: mockElementScrollHeight,
})
givenElementVisibilityRefMock(true)
useInfiniteScroll(mockElement, mockHandler)
mockElement.scrollTop = mockElementScrollHeight
mockElement.dispatchEvent(new Event('scroll'))
await flushPromises()
expect(mockHandler).toHaveBeenCalledTimes(1)
})
function givenMockElement({
scrollHeight = 0,
} = {}): HTMLDivElement {
const mockElement = document.createElement('div')
Object.defineProperty(mockElement, 'scrollHeight', {
value: scrollHeight,
})
return mockElement
}
function givenElementVisibilityRefMock(defaultValue: boolean) {
const mockVisibilityRef = ref(defaultValue)
vi.mocked(useElementVisibility).mockReturnValue(mockVisibilityRef)
return mockVisibilityRef
}
})