Array of test suites to execute
Test framework adapter providing describe, test, and beforeEach functions
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);
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.