testing-core-processors

À utiliser lors de l'écriture ou du débogage de tests d'intégration pour les processeurs d'erreurs dans packages/core/src/processors/. Couvre le modèle MockLanguageModelV2 pour simuler…

npx skills add https://github.com/mastra-ai/mastra --skill testing-core-processors

Testing Core Error Processors

How to write integration tests for error processors in packages/core/src/processors/.

Prerequisites

  • Build core before running tests: pnpm build:core (from repo root)
  • If focused vitest runs fail to resolve @internal/test-utils/setup, the build step was skipped

Mock Model Pattern

Use MockLanguageModelV2 from @internal/ai-sdk-v5/test to simulate API errors and verify retry behavior.

import { APICallError } from '@internal/ai-sdk-v5';
import { convertArrayToReadableStream, MockLanguageModelV2 } from '@internal/ai-sdk-v5/test';

// Track calls and captured prompts
let callCount = 0;
const receivedPrompts: any[] = [];

const model = new MockLanguageModelV2({
  doGenerate: async ({ prompt }) => {
    callCount++;
    receivedPrompts.push(JSON.parse(JSON.stringify(prompt)));
    if (callCount === 1) {
      throw new APICallError({
        message: '...',
        url: '...',
        requestBodyValues: {},
        statusCode: 400,
        responseBody: '...',
        isRetryable: false,
      });
    }
    return {
      rawCall: { rawPrompt: null, rawSettings: {} },
      finishReason: 'stop',
      usage: { inputTokens: 10, outputTokens: 20, totalTokens: 30 },
      content: [{ type: 'text', text: 'response' }],
      warnings: [],
    };
  },
  doStream: async ({ prompt }) => {
    // Same error logic as doGenerate
    // IMPORTANT: Stream response must include all event types:
    return {
      rawCall: { rawPrompt: null, rawSettings: {} },
      warnings: [],
      stream: convertArrayToReadableStream([
        { type: 'stream-start', warnings: [] },
        { type: 'response-metadata', id: 'id-0', modelId: 'mock-model', timestamp: new Date(0) },
        { type: 'text-start', id: 'text-1' },
        { type: 'text-delta', id: 'text-1', delta: 'response text' },
        { type: 'text-end', id: 'text-1' },
        { type: 'finish', finishReason: 'stop', usage: { inputTokens: 10, outputTokens: 20, totalTokens: 30 } },
      ]),
    };
  },
});

Stream Mock Gotcha

The stream mock format requires stream-start, response-metadata, text-start, text-delta, text-end, and finish events. Using only text-delta + finish (the minimal format) will result in empty text output because the AI SDK expects the full event sequence. See prefill-error-recovery.test.ts for the reference pattern.

Test Structure

For each error processor, write at minimum:

  1. Happy path: Processor catches the target error, modifies messages, retries successfully
    • Assert: agent.generate() succeeds, mock called 2x, retry prompt has expected modifications
  2. Control test: Same scenario without the processor — error propagates
    • Assert: agent.generate() throws the expected error
  3. Selectivity test: Processor ignores unrelated errors (e.g. rate limit 429)
    • Assert: Error propagates, mock called only 1x

Passing Messages with Tool Calls

When seeding conversation history for tool-related tests, pass messages as the second argument to agent.generate() or agent.stream() using the AI SDK message format:

const messages = [
  { role: 'user', content: 'Do something' },
  { role: 'assistant', content: [{ type: 'tool-call', toolCallId: 'some-id', toolName: 'myTool', args: {} }] },
  { role: 'tool', content: [{ type: 'tool-result', toolCallId: 'some-id', toolName: 'myTool', result: 'done' }] },
];
await agent.generate(messages);

Running Tests

# Run focused processor tests
npx vitest run packages/core/src/processors/my-processor.test.ts

# Run all processor tests
npx vitest run packages/core/src/processors/

# Full core test suite (slower)
pnpm test:core

Devin Secrets Needed

None for mock-based integration tests. For live API tests:

  • ANTHROPIC_API_KEY — for testing against real Anthropic API
  • OPENROUTER_API_KEY — for testing provider switching scenarios

Plus de skills de mastra-ai

testing-mastracode-tui
mastra-ai
Test des fonctionnalités de l'interface TUI de mastracode de manière interactive dans Konsole. Couvre la configuration du modèle, le cycle de vie des threads, l'isolation des états de tâche et les bloqueurs courants.
official
mastra-smoke-test
mastra-ai
Test de fumée des projets Mastra en local ou déploiement en préproduction/production. Teste l'interface Studio, les agents, les outils, les workflows, les traces, la mémoire et plus encore. Prend en charge à la fois le local…
official
security-review
mastra-ai
Liste de vérification de révision de code axée sur la sécurité pour identifier les vulnérabilités
official
technical-writing
mastra-ai
Directives pour créer une documentation technique claire et bien structurée
official
code-standards
mastra-ai
Normes de qualité du code et guide de style pour la revue des pull requests
official
debugging-difficult-bugs
mastra-ai
Utilisez tôt lors du débogage d'un bug moyen ou difficile, surtout lorsque les tests seuls peuvent ne pas révéler la défaillance réelle à l'exécution. Déclenchez ceci avant une itération TDD prolongée…
official
e2e-frontend-validation
mastra-ai
Workflow de validation E2E pour les modifications frontend dans les packages playground utilisant Playwright MCP
official
e2e-tests-studio
mastra-ai
REQUIS lors de la modification de tout fichier dans packages/playground-ui ou packages/playground. Se déclenche lors de : création/modification/refactorisation de composants React, modifications de l'interface utilisateur,…
official