arvo-event-handler
    Preparing search index...

    Function runArvoTestSuites

    • Executes test suites for Arvo event handlers using the provided test framework adapter.

      This function registers test suites with your test framework (Vitest, Jest, Mocha, etc.) by using the provided adapter. Each test suite can contain multiple configurations and test cases. Test cases execute sequentially with each step receiving output from the previous step, enabling testing of complex event-driven workflows.

      Features include OpenTelemetry tracing for observability, support for error validation, event output validation, and optional retry logic for flaky tests.

      Parameters

      • testSuites: ArvoTestSuite[]

        Array of test suites to execute

      • adapter: IArvoTestFramework

        Test framework adapter providing describe, test, and beforeEach functions

      Returns void

      import { runArvoTestSuites } from 'arvo-event-handler/test';
      import { describe, test, beforeEach } from 'vitest';

      const vitestAdapter = { describe, test, beforeEach };

      const suites: ArvoTestSuite[] = [
      {
      config: { name: 'User Handler', handler: userHandler },
      cases: [
      {
      name: 'Should create user and send email',
      steps: [
      {
      input: () => createArvoEvent({}),
      expectedEvents: (events) => events.length === 2
      },
      {
      input: (prev) => prev[1], // Use second event from previous step
      expectedEvents: (events) => events[0].type === 'email.sent'
      }
      ]
      }
      ]
      }
      ];

      runArvoTestSuites(suites, vitestAdapter);
      // Testing with retry logic for non-deterministic handlers
      const suites: ArvoTestSuite[] = [
      {
      config: { name: 'Flaky Handler', handler: flakyHandler },
      cases: [
      {
      name: 'Should eventually succeed',
      steps: [{ input: () => event, expectedEvents: (e) => e.length > 0 }],
      repeat: { times: 10, successThreshold: 80 } // 80% success rate required
      }
      ]
      }
      ];

      runArvoTestSuites(suites, vitestAdapter);
      // Testing error cases
      const suites: ArvoTestSuite[] = [
      {
      config: { name: 'Error Handler', handler: errorHandler },
      cases: [
      {
      name: 'Should throw validation error',
      steps: [
      {
      input: () => createArvoEvent({}),
      expectedError: (error) => error.message.includes('validation')
      }
      ]
      }
      ]
      }
      ];

      runArvoTestSuites(suites, vitestAdapter);