brainy/tests/setup.ts

114 lines
3.1 KiB
TypeScript
Raw Normal View History

/**
* Simple test setup for Brainy library
* No direct TensorFlow references - patches are handled internally by Brainy
*/
import { beforeAll, beforeEach, afterEach, afterAll } from 'vitest'
import { existsSync, rmSync } from 'fs'
import { join } from 'path'
// Configure model loading for tests
beforeAll(() => {
// Set model path to local models directory
const modelsPath = join(process.cwd(), 'models')
// Check if models exist
if (existsSync(modelsPath)) {
process.env.BRAINY_MODELS_PATH = modelsPath
console.log('✅ Using local models for tests:', modelsPath)
} else {
console.warn('⚠️ Models directory not found, tests may download models')
}
// Disable remote model downloads in tests to avoid network dependencies
process.env.BRAINY_ALLOW_REMOTE_MODELS = 'false'
// Set test environment
process.env.NODE_ENV = 'test'
// Disable verbose logging in tests
process.env.BRAINY_LOG_LEVEL = 'error'
})
// Define the test utilities type for reuse
type TestUtilsType = {
createTestVector: (dimensions: number) => number[]
timeout: number
}
// Extend global type definitions for both global and globalThis
declare global {
let testUtils: TestUtilsType | undefined
let __ENV__: any
}
// Explicitly declare globalThis interface to ensure TypeScript recognizes these properties
declare global {
interface globalThis {
testUtils?: TestUtilsType | undefined
__ENV__?: any
}
}
// Clean up between tests
beforeEach(() => {
// Clear any global state that might interfere with tests
if (typeof globalThis !== 'undefined' && globalThis.__ENV__) {
delete globalThis.__ENV__
}
if (typeof global !== 'undefined' && global.__ENV__) {
delete global.__ENV__
}
// Clean up test data directory to prevent file accumulation
const testDataDir = join(process.cwd(), 'brainy-data')
if (existsSync(testDataDir)) {
try {
rmSync(testDataDir, { recursive: true, force: true })
} catch (error) {
// Ignore errors during cleanup
}
}
})
// Clean up after each test
afterEach(() => {
// Force garbage collection if available (requires --expose-gc flag)
if (global.gc) {
global.gc()
}
})
// Final cleanup after all tests
afterAll(() => {
// Clean up test data directory
const testDataDir = join(process.cwd(), 'brainy-data')
if (existsSync(testDataDir)) {
try {
rmSync(testDataDir, { recursive: true, force: true })
} catch (error) {
// Ignore errors during cleanup
}
}
})
// Add simple test utilities to both global and globalThis for compatibility
const testUtilsObject = {
// Create a simple test vector with predictable values
createTestVector: (dimensions: number): number[] => {
return Array.from({ length: dimensions }, (_, i) => (i + 1) / dimensions)
},
// Standard timeout for async operations
timeout: 30000
}
global.testUtils = testUtilsObject
globalThis.testUtils = testUtilsObject
// Set a clear test environment flag for embedding system
globalThis.__BRAINY_TEST_ENV__ = true
if (typeof global !== 'undefined') {
(global as any).__BRAINY_TEST_ENV__ = true
}