testing-core-processors

bởi mastra-ai

Sử dụng khi viết hoặc gỡ lỗi các kiểm thử tích hợp cho các bộ xử lý lỗi trong packages/core/src/processors/. Bao gồm mẫu MockLanguageModelV2 để mô phỏng…

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

Thêm skills từ mastra-ai

testing-mastracode-tui
mastra-ai
Kiểm thử tương tác các tính năng TUI của mastracode trong Konsole. Bao gồm cấu hình mô hình, vòng đời luồng, cách ly trạng thái tác vụ và các rào cản phổ biến.
official
mastra-smoke-test
mastra-ai
Kiểm tra nhanh các dự án Mastra cục bộ hoặc triển khai lên môi trường staging/production. Kiểm tra Studio UI, tác nhân, công cụ, quy trình làm việc, dấu vết, bộ nhớ và nhiều hơn nữa. Hỗ trợ cả cục bộ…
official
security-review
mastra-ai
Danh sách kiểm tra đánh giá mã nguồn tập trung vào bảo mật để xác định các lỗ hổng
official
technical-writing
mastra-ai
Hướng dẫn tạo tài liệu kỹ thuật rõ ràng, có cấu trúc tốt
official
code-standards
mastra-ai
Tiêu chuẩn chất lượng mã và hướng dẫn phong cách để xem xét pull requests
official
debugging-difficult-bugs
mastra-ai
Sử dụng sớm khi gỡ lỗi một lỗi ở mức trung bình hoặc khó, đặc biệt khi chỉ kiểm thử có thể không phát hiện ra lỗi thời gian chạy thực sự. Kích hoạt kỹ năng này trước khi lặp lại TDD kéo dài…
official
e2e-frontend-validation
mastra-ai
Quy trình xác thực E2E cho các thay đổi frontend trong các gói playground sử dụng Playwright MCP
official
e2e-tests-studio
mastra-ai
BẮT BUỘC khi sửa đổi bất kỳ tệp nào trong packages/playground-ui hoặc packages/playground. Kích hoạt khi: tạo/sửa/tái cấu trúc component React, thay đổi UI,…
official