From ad4af273859a6b6effc0d788bd2e347a4f4974bd Mon Sep 17 00:00:00 2001 From: David Snelling Date: Wed, 16 Jul 2025 13:08:41 -0700 Subject: [PATCH] **test(tests): improve isolation and enhance test configuration** - **Test Enhancements**: - Refactored test setup in `core.test.ts` for better isolation and clarity: - Added explicit `.clear()` calls to ensure clean state between tests. - Replaced old vector addition logic with simplified data insertion methods. - Updated search operations to reflect current functionality and debug-friendly output. - Introduced the `@vitest-environment jsdom` annotation in `environment.browser.test.ts` for accurate browser environment emulation. - **Configuration Updates**: - Enhanced `vitest.config.ts`: - Introduced custom `reporters` for cleaner and focused test result presentation. - Expanded console log filtering with additional patterns for reducing noise from TensorFlow.js and setup processes. - **Purpose**: - These updates improve test clarity, consistency, and robustness while streamlining the configuration to minimize distractions in test outputs. --- tests/core.test.ts | 39 +++++++++++++++++-------------- tests/environment.browser.test.ts | 1 + vitest.config.ts | 39 ++++++++++++++++++++++++++++++- 3 files changed, 61 insertions(+), 18 deletions(-) diff --git a/tests/core.test.ts b/tests/core.test.ts index bfa90804..f6c89be4 100644 --- a/tests/core.test.ts +++ b/tests/core.test.ts @@ -150,7 +150,7 @@ describe('Brainy Core Functionality', () => { await euclideanData.init() await cosineData.init() - + // Clear any existing data to ensure test isolation await euclideanData.clear() await cosineData.clear() @@ -308,30 +308,35 @@ describe('Brainy Core Functionality', () => { }) it('should maintain search quality with more data', async () => { - const data = new brainy.BrainyData({ - dimensions: 5, - metric: 'euclidean' + // Create database with proper configuration for testing + const db = new brainy.BrainyData({ + embeddingFunction: brainy.createEmbeddingFunction(), + metric: 'cosine' }) - await data.init() + await db.init() + await db.clear() // Clear any existing data - // Add some known vectors - const knownVector = [1, 2, 3, 4, 5] - await data.add(knownVector, { id: 'known', type: 'target' }) + // Add known data + await db.add('known data', { id: 'known' }) - // Add noise vectors - for (let i = 0; i < 50; i++) { - const noiseVector = - globalThis.testUtils?.createTestVector(5) || - Array.from({ length: 5 }, (_, i) => (i + 1) / 5) - await data.add(noiseVector, { id: `noise_${i}`, type: 'noise' }) + // Add noise data + for (let i = 0; i < 100; i++) { + await db.add(`noise_${i}`, { id: `noise_${i}` }) } - // Search for the known vector should still find it first - const results = await data.search(knownVector, 5) + // Perform search using the correct method + const results = await db.search('known data', 10) + // Debugging output + console.log( + 'Search results:', + results.map((r) => r.metadata?.id) + ) + + // Assertions expect(results.length).toBeGreaterThan(0) - expect(results[0].metadata.id).toBe('known') + expect(results[0].metadata?.id).toBe('known') }) }) }) diff --git a/tests/environment.browser.test.ts b/tests/environment.browser.test.ts index 54ccc77c..dd017fcc 100644 --- a/tests/environment.browser.test.ts +++ b/tests/environment.browser.test.ts @@ -1,6 +1,7 @@ /** * Browser Environment Tests * Tests Brainy functionality in browser environment as a consumer would use it + * @vitest-environment jsdom */ import { describe, it, expect, beforeAll, vi } from 'vitest' diff --git a/vitest.config.ts b/vitest.config.ts index c115b05b..5454257a 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -26,6 +26,15 @@ export default defineConfig({ FORCE_PATCHED_PLATFORM: 'true' } }, + // Use a cleaner reporter focused on test results + reporters: [ + [ + 'default', + { + summary: false + } + ] + ], // Reduce noise in output silent: false, // Configure error display for better readability @@ -43,7 +52,35 @@ export default defineConfig({ // Filter out noisy console output more aggressively onConsoleLog: (log: string, type: 'stdout' | 'stderr'): false | void => { // Filter out all TensorFlow.js, model loading, and setup noise - const noisePatterns: string[] = [] + const noisePatterns: string[] = [ + 'Brainy: Successfully patched TensorFlow.js PlatformNode', + 'Applied TensorFlow.js patch via ES modules', + 'Brainy running in Node.js environment', + 'Pre-loading Universal Sentence Encoder model', + 'Universal Sentence Encoder module structure', + 'No default export', + 'Using sentenceEncoderModule.load', + 'Loading Universal Sentence Encoder model', + 'Universal Sentence Encoder model loaded successfully', + 'Using file system storage for Node.js environment', + 'Using WebGL backend for TensorFlow.js', + 'Platform node has already been set', + 'Overwriting the platform with node', + 'Brainy: Applying TensorFlow.js platform patch', + 'The kernel', + 'for backend', + 'is already registered', + 'Hi there 👋. Looks like you are running TensorFlow.js', + 'backend registration', + 'webgl', + 'cpu', + 'Could not get context for WebGL version', + 'Retrying Universal Sentence Encoder initialization', + 'Skipping noun', + 'due to dimension mismatch', + 'Retrying Universal Sentence Encoder model loading', + 'Successfully loaded Universal Sentence Encoder with fallback method' + ] // Return false (don't show) if log contains any noise pattern if (noisePatterns.some((pattern) => log.includes(pattern))) {