@@ -221,15 +221,31 @@ export function updateTask(event: TaskUpdateEvent, task: Task, runner: VitestRun
221221 sendTasksUpdateThrottled ( runner )
222222}
223223
224- async function callCleanupHooks ( cleanups : unknown [ ] ) {
225- await Promise . all (
226- cleanups . map ( async ( fn ) => {
224+ async function callCleanupHooks ( runner : VitestRunner , cleanups : unknown [ ] ) {
225+ const sequence = runner . config . sequence . hooks
226+
227+ if ( sequence === 'stack' ) {
228+ cleanups = cleanups . slice ( ) . reverse ( )
229+ }
230+
231+ if ( sequence === 'parallel' ) {
232+ await Promise . all (
233+ cleanups . map ( async ( fn ) => {
234+ if ( typeof fn !== 'function' ) {
235+ return
236+ }
237+ await fn ( )
238+ } ) ,
239+ )
240+ }
241+ else {
242+ for ( const fn of cleanups ) {
227243 if ( typeof fn !== 'function' ) {
228- return
244+ continue
229245 }
230246 await fn ( )
231- } ) ,
232- )
247+ }
248+ }
233249}
234250
235251export async function runTest ( test : Test , runner : VitestRunner ) : Promise < void > {
@@ -314,15 +330,6 @@ export async function runTest(test: Test, runner: VitestRunner): Promise<void> {
314330 failTask ( test . result , e , runner . config . diffOptions )
315331 }
316332
317- // skipped with new PendingError
318- if ( test . result ?. pending || test . result ?. state === 'skip' ) {
319- test . mode = 'skip'
320- test . result = { state : 'skip' , note : test . result ?. note , pending : true }
321- updateTask ( 'test-finished' , test , runner )
322- setCurrentTest ( undefined )
323- return
324- }
325-
326333 try {
327334 await runner . onTaskFinished ?.( test )
328335 }
@@ -335,7 +342,7 @@ export async function runTest(test: Test, runner: VitestRunner): Promise<void> {
335342 test . context ,
336343 suite ,
337344 ] )
338- await callCleanupHooks ( beforeEachCleanups )
345+ await callCleanupHooks ( runner , beforeEachCleanups )
339346 await callFixtureCleanup ( test . context )
340347 }
341348 catch ( e ) {
@@ -356,6 +363,20 @@ export async function runTest(test: Test, runner: VitestRunner): Promise<void> {
356363 test . onFailed = undefined
357364 test . onFinished = undefined
358365
366+ // skipped with new PendingError
367+ if ( test . result ?. pending || test . result ?. state === 'skip' ) {
368+ test . mode = 'skip'
369+ test . result = {
370+ state : 'skip' ,
371+ note : test . result ?. note ,
372+ pending : true ,
373+ duration : now ( ) - start ,
374+ }
375+ updateTask ( 'test-finished' , test , runner )
376+ setCurrentTest ( undefined )
377+ return
378+ }
379+
359380 if ( test . result . state === 'pass' ) {
360381 break
361382 }
@@ -504,7 +525,7 @@ export async function runSuite(suite: Suite, runner: VitestRunner): Promise<void
504525
505526 try {
506527 await callSuiteHook ( suite , suite , 'afterAll' , runner , [ suite ] )
507- await callCleanupHooks ( beforeAllCleanups )
528+ await callCleanupHooks ( runner , beforeAllCleanups )
508529 }
509530 catch ( e ) {
510531 failTask ( suite . result , e , runner . config . diffOptions )
0 commit comments