ursamu-mud
Version:
Ursamu - Modular MUD Engine with sandboxed scripting and plugin system
94 lines • 2.99 kB
JavaScript
/**
* Jest setup and utilities for testing
*/
import { promises as fs } from 'fs';
// Custom matchers for hot-reload testing
expect.extend({
toBeValidReloadResult(received) {
const pass = received &&
typeof received.success === 'boolean' &&
Array.isArray(received.errors) &&
Array.isArray(received.warnings);
if (pass) {
return {
message: () => `expected ${received} not to be a valid reload result`,
pass: true,
};
}
else {
return {
message: () => `expected ${received} to be a valid reload result with success, errors, and warnings properties`,
pass: false,
};
}
},
toHaveReloadErrors(received) {
const pass = received &&
Array.isArray(received.errors) &&
received.errors.length > 0;
if (pass) {
return {
message: () => `expected reload result not to have errors`,
pass: true,
};
}
else {
return {
message: () => `expected reload result to have errors`,
pass: false,
};
}
},
async toCompleteWithinTime(received, timeLimit) {
const startTime = Date.now();
try {
await received;
const duration = Date.now() - startTime;
const pass = duration <= timeLimit;
if (pass) {
return {
message: () => `expected operation not to complete within ${timeLimit}ms (completed in ${duration}ms)`,
pass: true,
};
}
else {
return {
message: () => `expected operation to complete within ${timeLimit}ms but took ${duration}ms`,
pass: false,
};
}
}
catch (error) {
return {
message: () => `expected operation to complete but it failed: ${error}`,
pass: false,
};
}
}
});
// Global test utilities
global.testUtils = {
createTempFile: async (dir, filename, content) => {
const filePath = require('path').join(dir, filename);
await fs.writeFile(filePath, content, 'utf-8');
return filePath;
},
waitFor: (ms) => {
return new Promise(resolve => setTimeout(resolve, ms));
},
createMockReloadEvent: (type, data = {}) => ({
type,
timestamp: Date.now(),
data,
source: 'TestSource'
})
};
// Increase default test timeout for integration tests
jest.setTimeout(30000);
// Suppress console output during tests unless CI or verbose mode
if (!process.env.CI && !process.env.VERBOSE_TESTS) {
console.log = jest.fn();
console.warn = jest.fn();
console.error = jest.fn();
}
//# sourceMappingURL=jest.setup.js.map