@@ -4,15 +4,29 @@ beforeEach(() => {
4
4
jest . clearAllMocks ( )
5
5
} )
6
6
7
+ const fidAttribution = {
8
+ eventTarget : 'html>body' ,
9
+ eventType : 'pointerdown' ,
10
+ eventTime : 1 ,
11
+ loadState : 'loading'
12
+ }
13
+ let triggeronFIDCallback
7
14
const getFreshFIDImport = async ( codeToRun ) => {
15
+ jest . doMock ( 'web-vitals/attribution' , ( ) => ( {
16
+ onFID : jest . fn ( cb => { triggeronFIDCallback = cb ; cb ( { value : 100 , attribution : fidAttribution } ) } )
17
+ } ) )
8
18
const { firstInputDelay } = await import ( './first-input-delay' )
9
19
codeToRun ( firstInputDelay )
10
20
}
11
21
12
22
describe ( 'fid' , ( ) => {
13
23
test ( 'reports fcp from web-vitals' , ( done ) => {
14
- getFreshFIDImport ( metric => metric . subscribe ( ( { value } ) => {
24
+ getFreshFIDImport ( metric => metric . subscribe ( ( { value, attrs } ) => {
15
25
expect ( value ) . toEqual ( 1 )
26
+ expect ( attrs . type ) . toEqual ( fidAttribution . eventType )
27
+ expect ( attrs . fid ) . toEqual ( 100 )
28
+ expect ( attrs . eventTarget ) . toEqual ( fidAttribution . eventTarget )
29
+ expect ( attrs . loadState ) . toEqual ( fidAttribution . loadState )
16
30
done ( )
17
31
} ) )
18
32
} )
@@ -53,16 +67,16 @@ describe('fid', () => {
53
67
__esModule : true ,
54
68
isBrowserScope : true
55
69
} ) )
56
- let sub1 , sub2
70
+ let witness = 0
57
71
getFreshFIDImport ( metric => {
58
- const remove1 = metric . subscribe ( ( { entries } ) => {
59
- sub1 ??= entries [ 0 ] . id
60
- if ( sub1 === sub2 ) { remove1 ( ) ; remove2 ( ) ; done ( ) }
72
+ metric . subscribe ( ( { value } ) => {
73
+ expect ( value ) . toEqual ( 1 )
74
+ witness ++
61
75
} )
62
-
63
- const remove2 = metric . subscribe ( ( { entries } ) => {
64
- sub2 ??= entries [ 0 ] . id
65
- if ( sub1 === sub2 ) { remove1 ( ) ; remove2 ( ) ; done ( ) }
76
+ metric . subscribe ( ( { value } ) => {
77
+ expect ( value ) . toEqual ( 1 )
78
+ witness ++
79
+ if ( witness === 2 ) done ( )
66
80
} )
67
81
} )
68
82
} )
@@ -74,15 +88,15 @@ describe('fid', () => {
74
88
isBrowserScope : true
75
89
} ) )
76
90
let triggered = 0
77
- getFreshFIDImport ( metric => metric . subscribe ( ( { value } ) => {
78
- triggered ++
79
- expect ( value ) . toEqual ( 1 )
80
- expect ( triggered ) . toEqual ( 1 )
81
- setTimeout ( ( ) => {
91
+ getFreshFIDImport ( metric => {
92
+ metric . subscribe ( ( { value } ) => {
93
+ triggered ++
94
+ expect ( value ) . toEqual ( 1 )
82
95
expect ( triggered ) . toEqual ( 1 )
83
- done ( )
84
- } , 1000 )
96
+ } )
97
+ triggeronFIDCallback ( { value : 'notequal1' } )
98
+ expect ( triggered ) . toEqual ( 1 )
99
+ done ( )
85
100
} )
86
- )
87
101
} )
88
102
} )
0 commit comments