@@ -18,17 +18,21 @@ describe('useMediaRecorder', () => {
18
18
resume,
19
19
} = useMediaRecorder ( { constraints : { audio : true } } )
20
20
await start ( )
21
- await new Promise ( resolve => setTimeout ( resolve , 10 ) )
22
- expect ( state . value ) . toMatchInlineSnapshot ( `"recording"` )
23
- await pause ( )
24
- await new Promise ( resolve => setTimeout ( resolve , 10 ) )
25
- expect ( state . value ) . toMatchInlineSnapshot ( `"paused"` )
26
- await resume ( )
27
- await new Promise ( resolve => setTimeout ( resolve , 10 ) )
28
- expect ( state . value ) . toMatchInlineSnapshot ( `"recording"` )
29
- await stop ( )
30
- await new Promise ( resolve => setTimeout ( resolve , 10 ) )
31
- expect ( state . value ) . toMatchInlineSnapshot ( `"inactive"` )
21
+ await vi . waitFor ( ( ) => {
22
+ expect ( state . value ) . toBe ( "recording" )
23
+ } )
24
+ pause ( )
25
+ await vi . waitFor ( ( ) => {
26
+ expect ( state . value ) . toBe ( "paused" )
27
+ } )
28
+ resume ( )
29
+ await vi . waitFor ( ( ) => {
30
+ expect ( state . value ) . toBe ( "recording" )
31
+ } )
32
+ stop ( )
33
+ await vi . waitFor ( ( ) => {
34
+ expect ( state . value ) . toBe ( "inactive" )
35
+ } )
32
36
} )
33
37
34
38
it ( 'data should update when recording' , async ( ) => {
@@ -43,28 +47,33 @@ describe('useMediaRecorder', () => {
43
47
expect ( data . value ?. length ) . toBeGreaterThan ( 0 )
44
48
} )
45
49
46
- it ( 'stream should be defined after start' , async ( ) => {
50
+ it ( 'stream should be defined and active after start' , async ( ) => {
47
51
const {
48
52
stream,
49
53
start,
50
54
} = useMediaRecorder ( { constraints : { audio : true } } )
51
55
expect ( stream . value ) . toBeUndefined ( )
56
+ expect ( stream . value ?. active ) . toBeUndefined ( )
52
57
await start ( )
53
58
expect ( stream . value ) . toBeDefined ( )
59
+ expect ( stream . value ?. active ) . toBe ( true )
54
60
} )
55
61
56
- it ( 'stream should be undefined after stop' , async ( ) => {
62
+ it ( 'stream should not be active after stop' , async ( ) => {
57
63
const {
58
64
stream,
59
65
start,
60
66
stop,
61
67
} = useMediaRecorder ( { constraints : { audio : true } } )
62
68
await start ( )
63
- await stop ( )
64
- expect ( stream . value . active ) . toMatchInlineSnapshot ( `true` )
69
+ expect ( stream . value ?. active ) . toMatchInlineSnapshot ( `true` )
70
+ stop ( )
71
+ await vi . waitFor ( ( ) => {
72
+ expect ( stream . value ?. active ) . toBe ( false )
73
+ } )
65
74
} )
66
75
67
- it ( 'stream should be undefined after pause' , async ( ) => {
76
+ it . skip ( 'stream should be undefined after pause' , async ( ) => {
68
77
const {
69
78
stream,
70
79
start,
@@ -83,8 +92,8 @@ describe('useMediaRecorder', () => {
83
92
resume,
84
93
} = useMediaRecorder ( { constraints : { audio : true } } )
85
94
await start ( )
86
- await pause ( )
87
- await resume ( )
95
+ pause ( )
96
+ resume ( )
88
97
expect ( stream . value ) . toBeDefined ( )
89
98
} )
90
99
@@ -94,9 +103,10 @@ describe('useMediaRecorder', () => {
94
103
mimeType,
95
104
} = useMediaRecorder ( { constraints : { audio : true } } )
96
105
expect ( mimeType . value ) . toBeUndefined ( )
97
- await start ( 10 )
98
- await new Promise ( resolve => setTimeout ( resolve , 200 ) )
99
- expect ( mimeType . value ) . toBeDefined ( )
106
+ await start ( )
107
+ await vi . waitFor ( ( ) => {
108
+ expect ( mimeType . value ) . toBeDefined ( )
109
+ } )
100
110
} )
101
111
102
112
it ( 'should be supported' , ( ) => {
@@ -121,17 +131,22 @@ describe('useMediaRecorder', () => {
121
131
pause,
122
132
stop,
123
133
state,
134
+ stream
124
135
} = useMediaRecorder ( { constraints : { audio : true } } )
125
136
126
137
await start ( )
127
- await new Promise ( resolve => setTimeout ( resolve , 10 ) )
128
- expect ( state . value ) . toBe ( 'recording' )
129
- await pause ( )
130
- await new Promise ( resolve => setTimeout ( resolve , 10 ) )
131
- expect ( state . value ) . toBe ( 'paused' )
138
+ await vi . waitFor ( ( ) => {
139
+ expect ( state . value ) . toBe ( 'recording' )
140
+ } )
141
+ pause ( )
142
+ await vi . waitFor ( ( ) => {
143
+ expect ( state . value ) . toBe ( 'paused' )
144
+ } )
132
145
await stop ( )
133
- await new Promise ( resolve => setTimeout ( resolve , 10 ) )
134
- expect ( state . value ) . toBe ( 'inactive' )
146
+ await vi . waitFor ( ( ) => {
147
+ expect ( state . value ) . toBe ( 'inactive' )
148
+ expect ( stream . value ?. active ) . toBe ( false )
149
+ } )
135
150
} )
136
151
137
152
it ( 'data should exist when stopping from pause' , async ( ) => {
@@ -143,11 +158,12 @@ describe('useMediaRecorder', () => {
143
158
} = useMediaRecorder ( { constraints : { audio : true } } )
144
159
145
160
expect ( data . value ) . toHaveLength ( 0 )
146
- await start ( 10 )
147
- await new Promise ( resolve => setTimeout ( resolve , 100 ) )
148
- await pause ( )
149
- await stop ( )
150
- expect ( data . value . length ) . toBeGreaterThan ( 0 )
161
+ await start ( )
162
+ pause ( )
163
+ stop ( )
164
+ await vi . waitFor ( ( ) => {
165
+ expect ( data . value . length ) . toBeGreaterThan ( 0 )
166
+ } )
151
167
} )
152
168
153
169
it ( 'should call all lifecycle hooks' , async ( ) => {
@@ -164,15 +180,19 @@ describe('useMediaRecorder', () => {
164
180
} = useMediaRecorder ( { constraints : { audio : true } , onStop, onStart, onPause, onResume } )
165
181
166
182
await start ( )
183
+ await vi . waitFor ( ( ) => {
184
+ expect ( onStart ) . toHaveBeenCalledTimes ( 1 )
185
+ } )
167
186
pause ( )
168
- await new Promise ( resolve => setTimeout ( resolve , 10 ) )
187
+ await vi . waitFor ( ( ) => {
188
+ expect ( onPause ) . toHaveBeenCalledTimes ( 1 )
189
+ } )
169
190
resume ( )
191
+ await vi . waitFor ( ( ) => {
192
+ expect ( onResume ) . toHaveBeenCalledTimes ( 1 )
193
+ } )
170
194
stop ( )
171
-
172
195
await vi . waitFor ( ( ) => {
173
- expect ( onStart ) . toHaveBeenCalledTimes ( 1 )
174
- expect ( onPause ) . toHaveBeenCalledTimes ( 1 )
175
- expect ( onResume ) . toHaveBeenCalledTimes ( 1 )
176
196
expect ( onStop ) . toHaveBeenCalledTimes ( 1 )
177
197
} )
178
198
} )
0 commit comments