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
text/typescript
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;