1
1
import { act , renderHook } from "@testing-library/react-hooks" ;
2
+ import { renderHook as renderHookSSR } from "@testing-library/react-hooks/server" ;
2
3
import { createEvent , fireEvent , render } from "@testing-library/react" ;
3
4
import { useLongPress } from "../use-long-press" ;
4
5
import {
@@ -39,7 +40,7 @@ import {
39
40
getDOMTestHandlersMap ,
40
41
getTestHandlersMap
41
42
} from "./use-long-press.test.utils" ;
42
- import { isMouseEvent , isPointerEvent , isTouchEvent } from "../use-long-press.utils" ;
43
+ import { isMouseEvent , isPointerEvent , isRecognisableEvent , isTouchEvent } from "../use-long-press.utils" ;
43
44
44
45
/*
45
46
⌜‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
@@ -127,42 +128,31 @@ describe('Hook handlers', () => {
127
128
⎹ Component context tests
128
129
⌞____________________________________________________________________________________________________
129
130
*/
130
- describe ( 'Browsers compatibility' , ( ) => {
131
- const originalTouchEvent = window . TouchEvent ;
132
-
133
- let touchEvent : React . TouchEvent ;
134
-
135
- let callback : MockedFunction < LongPressCallback > ;
136
- let onStart : MockedFunction < LongPressCallback > ;
137
- let onFinish : MockedFunction < LongPressCallback > ;
138
- let onCancel : MockedFunction < LongPressCallback > ;
139
-
131
+ describe ( 'Different environments compatibility' , ( ) => {
140
132
beforeEach ( ( ) => {
141
133
// Use fake timers for detecting long press
142
134
vi . useFakeTimers ( ) ;
143
-
144
- touchEvent = createMockedTouchEvent ( ) ;
145
-
146
- // Temporary remove TouchEvent from window to check if test will be properly handled
147
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
148
- // @ts -ignore
149
- delete window . TouchEvent ;
150
-
151
- callback = vi . fn ( ) ;
152
- onStart = vi . fn ( ) ;
153
- onFinish = vi . fn ( ) ;
154
- onCancel = vi . fn ( ) ;
155
135
} ) ;
156
136
157
137
afterEach ( ( ) => {
158
- // Restore original window touch event
159
- window . TouchEvent = originalTouchEvent ;
160
-
161
138
vi . clearAllMocks ( ) ;
162
139
vi . clearAllTimers ( ) ;
163
140
} ) ;
164
141
165
142
test ( 'Properly detect TouchEvent event if browser doesnt provide test' , ( ) => {
143
+ const originalTouchEvent = window . TouchEvent ;
144
+ const touchEvent = createMockedTouchEvent ( ) ;
145
+
146
+ // Temporary remove TouchEvent from window to check if test will be properly handled
147
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
148
+ // @ts -ignore
149
+ delete window . TouchEvent ;
150
+
151
+ const callback = vi . fn ( ) ;
152
+ const onStart = vi . fn ( ) ;
153
+ const onFinish = vi . fn ( ) ;
154
+ const onCancel = vi . fn ( ) ;
155
+
166
156
const component = createTestElement ( {
167
157
callback,
168
158
onStart,
@@ -186,7 +176,45 @@ describe('Browsers compatibility', () => {
186
176
expect ( callback ) . toHaveBeenCalledWith ( expectTouchEvent , emptyContext ) ;
187
177
188
178
expect ( onCancel ) . toHaveBeenCalledTimes ( 0 ) ;
179
+
180
+ // Restore original window touch event
181
+ window . TouchEvent = originalTouchEvent ;
189
182
} ) ;
183
+
184
+ test . each ( [ [ LongPressEventType . Mouse ] , [ LongPressEventType . Touch ] , [ LongPressEventType . Pointer ] ] ) (
185
+ 'Using hook will not throw error when rendered in SSR context, using "%s" events' ,
186
+ ( eventType ) => {
187
+ const originalWindow = global . window ;
188
+
189
+ // Temporary delete window
190
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
191
+ // @ts -ignore
192
+ delete global . window ;
193
+
194
+ const callback = vi . fn ( ) ;
195
+ const onStart = vi . fn ( ) ;
196
+ const onMove = vi . fn ( ) ;
197
+ const onCancel = vi . fn ( ) ;
198
+ const onFinish = vi . fn ( ) ;
199
+
200
+ const event = longPressMockedEventCreatorMap [ eventType ] ( ) ;
201
+ const { result } = renderHookSSR ( ( ) =>
202
+ useLongPress ( callback , { detect : eventType , onStart, onMove, onCancel, onFinish } )
203
+ ) ;
204
+ const handlers = getTestHandlersMap ( eventType , result . current ( ) ) ;
205
+
206
+ handlers . start ( event ) ;
207
+ handlers . move ( event ) ;
208
+ vi . runOnlyPendingTimers ( ) ;
209
+ handlers . stop ( event ) ;
210
+
211
+ expect ( isRecognisableEvent ( event ) ) . toBe ( true ) ;
212
+ expect ( callback ) . toHaveBeenCalledTimes ( 1 ) ;
213
+
214
+ // Restore window
215
+ global . window = originalWindow ;
216
+ }
217
+ ) ;
190
218
} ) ;
191
219
192
220
describe ( 'Detecting long press' , ( ) => {
0 commit comments