UNPKG

spanwright

Version:

CLI tool to generate Cloud Spanner E2E testing framework projects with Go database tools and Playwright browser automation

60 lines (50 loc) โ€ข 2.28 kB
import { FullConfig } from '@playwright/test'; import { runMake } from './test-utils'; import * as fs from 'fs'; import * as path from 'path'; /** * Global teardown for Playwright tests * Cleans up isolated database environments and optionally stops emulator */ async function globalTeardown(config: FullConfig) { console.log('๐Ÿงน Starting global test teardown...'); try { // Clean up worker database configurations const testResultsDir = path.join(process.cwd(), 'test-results'); if (fs.existsSync(testResultsDir)) { const configFiles = fs.readdirSync(testResultsDir) .filter(file => file.startsWith('worker-') && file.endsWith('-config.json')); console.log(`๐Ÿ—‘๏ธ Cleaning up ${configFiles.length} worker configurations...`); for (const configFile of configFiles) { const configPath = path.join(testResultsDir, configFile); try { const workerConfig = JSON.parse(fs.readFileSync(configPath, 'utf8')); console.log(`๐Ÿ”ง Cleaned up worker ${workerConfig.workerId} (databases: ${workerConfig.primaryDbId}, ${workerConfig.secondaryDbId})`); // Remove the config file fs.unlinkSync(configPath); } catch (error: any) { console.warn(`โš ๏ธ Failed to clean up config file ${configFile}:`, error.message); } } } // Optionally stop the emulator (controlled by environment variable) const stopEmulator = process.env.STOP_EMULATOR_AFTER_TESTS === 'true'; if (stopEmulator) { console.log('๐Ÿ›‘ Stopping Spanner emulator...'); try { runMake('stop'); console.log('โœ… Emulator stopped successfully'); } catch (error: any) { console.warn('โš ๏ธ Failed to stop emulator:', error.message); } } else { console.log('๐Ÿ”„ Leaving Spanner emulator running (set STOP_EMULATOR_AFTER_TESTS=true to stop)'); } // Database connections are automatically cleaned up by seed-injector console.log('โœ… Global teardown completed successfully'); } catch (error: any) { console.error('โŒ Global teardown failed:', error.message); // Don't throw error in teardown to avoid masking test failures } } export default globalTeardown;