Skip to content

Tests

LLMxRay utilise Vitest pour les tests unitaires et Playwright pour les tests de bout en bout (E2E).

Commandes de test

CommandeDescription
npm run testExécuter les tests unitaires une fois
npm run test:watchExécuter les tests unitaires en mode surveillance
npm run test:coverageExécuter les tests unitaires avec rapport de couverture
npm run test:e2eExécuter les tests E2E (Chromium headless)
npm run test:e2e:headedExécuter les tests E2E avec navigateur visible
npm run test:e2e:uiExécuter les tests E2E avec l'interface Playwright
npm run test:e2e:liveExécuter les tests E2E contre Ollama en direct
npm run test:e2e:live:headedTests Ollama en direct avec navigateur visible
npm run test:e2e:allExécuter tous les projets de tests E2E

Tests unitaires (Vitest)

Configuration

Fichier : vitest.config.ts

typescript
{
  test: {
    environment: 'happy-dom',
    globals: true,
    include: ['src/**/*.test.ts'],
  },
  resolve: {
    alias: {
      '@': './src',
    },
  },
}
  • Environnement : happy-dom — Une implémentation DOM légère pour tester les composants Vue
  • Globals : true — Rend describe, it, expect disponibles sans import
  • Fichiers de test : src/**/*.test.ts — Co-localisés avec les fichiers source

Écrire des tests unitaires

Placez les fichiers de test à côté du code qu'ils testent :

src/services/
  reasoning-parser.ts
  reasoning-parser.test.ts

Exemple de test :

typescript
import { describe, it, expect } from 'vitest'
import { parseThinkBlocks } from './reasoning-parser'

describe('parseThinkBlocks', () => {
  it('extracts think block content', () => {
    const input = '<think>reasoning here</think>answer'
    const result = parseThinkBlocks(input)
    expect(result.steps).toHaveLength(1)
    expect(result.steps[0].content).toBe('reasoning here')
  })
})

Tests de bout en bout (Playwright)

Configuration

Fichier : playwright.config.ts

Deux projets de test :

chromium (par défaut)

  • Exécute tous les tests sauf les spécifications live-ollama
  • Utilise un serveur de développement Vite sur le port 5199
  • Pas d'Ollama requis — les tests simulent les réponses API

live-ollama

  • Exécute uniquement live-ollama.spec.ts
  • Nécessite une instance Ollama en cours d'exécution avec des modèles
  • Timeout : 120 secondes par test (le chargement du modèle peut être lent)

Répertoire de tests

e2e/
  example.spec.ts        # Tests de base de l'application
  live-ollama.spec.ts    # Tests nécessitant un Ollama réel

Écrire des tests E2E

typescript
import { test, expect } from '@playwright/test'

test('dashboard loads', async ({ page }) => {
  await page.goto('/')
  await expect(page.getByText('Chat Diagnostics')).toBeVisible()
})

Exécuter contre Ollama en direct

Le projet live-ollama teste des interactions réelles avec le modèle :

bash
# Assurez-vous qu'Ollama fonctionne avec au moins un modèle
ollama serve
ollama pull llama3.2

# Exécuter les tests en direct
npm run test:e2e:live

Avant de soumettre

Exécutez toujours les deux suites de tests avant de soumettre une PR :

bash
npm run test          # Les tests unitaires passent
npm run build         # Vérification des types + build réussi
npm run test:e2e      # Les tests E2E passent (pas d'Ollama requis)

Released under the Apache 2.0 License.