docs/testing.md
// vitest.config.ts
export default defineConfig({
test: {
globals: true,
environment: 'node',
env: {
NODE_ENV: 'test',
},
include: ['src/**/*.{test,spec}.{ts,tsx}'],
exclude: ['node_modules', 'dist', 'release', '.erb'],
}
})
npm run test - Run all tests oncenpm run test:watch - Run tests in watch modenpm run test:ui - Launch Vitest UI for interactive testingnpm run test:coverage - Run tests with coverage reportAI Provider Adapters (src/shared/models/)
Utility Functions (src/shared/utils/)
llm_utils.test.ts)Content Processing (src/renderer/)
base64.test.ts)latex.test.ts)provider-config.test.ts)Message Handling (src/renderer/utils/)
For AI provider testing, use createTestServer from @ai-sdk/provider-utils/test:
import { createTestServer } from '@ai-sdk/provider-utils/test'
const server = createTestServer({
'https://api.openai.com/v1/chat/completions': {
headers: { 'Content-Type': 'text/event-stream' },
chunks: [
'data: {"id":"1","object":"chat.completion.chunk","choices":[{"delta":{"content":"Hello"}}]}\n\n',
'data: [DONE]\n\n',
]
}
})
Use callNumber parameter for different responses per call:
const server = createTestServer({
'https://api.openai.com/v1/chat/completions': ({ callNumber }) => ({
chunks: callNumber === 0
? ['data: {"choices":[{"delta":{"tool_calls":[...]}}]}\n\n']
: ['data: {"choices":[{"delta":{"content":"Result"}}]}\n\n']
})
})
Suppress console output in tests:
if (process.env.NODE_ENV !== 'test') {
console.error('Error message')
}
.test.ts extensiondescribe blocksany type in testsThe project has been successfully migrated from Jest to Vitest for better ESM support and modern tooling:
Key Changes
@ai-sdk/provider-utils/testBenefits
Immediate Actions
Short-term Goals
Long-term Vision