Test a queue worker
Queue workers also have two useful levels:
createQueueWorkerContextMock(...)for direct handler testscreateQueueWorkerTestHarness(...)for one real worker cycle
Handler test
Use the context mock when you want to focus on the worker logic itself.
ts
import { createQueueWorkerContextMock } from '@purista/core'
const mock = createQueueWorkerContextMock(pingJobWorkerQueueWorkerBuilder, {
queueName: 'pingJob',
payload: { ping: 'queued ping' },
parameter: { requestId: 'req-1' },
})
const definition = await pingJobWorkerQueueWorkerBuilder.getDefinition()
await definition.handler(mock.context, mock.message)
expect(mock.stubs.job.complete.calledOnce).toBe(true)Use this level when you want to verify:
- job completion or retry logic
- resource usage
- handler branching
Runtime test
Use the harness when you want to verify the real worker runtime path.
ts
import { createQueueWorkerTestHarness } from '@purista/core'
const harness = await createQueueWorkerTestHarness(pingV1Service, pingJobWorkerQueueWorkerBuilder)
try {
const result = await harness.run({
id: 'job-1',
queueName: 'pingJob',
payload: { ping: 'queued ping' },
parameter: { requestId: 'req-1' },
headers: {},
createdAt: Date.now(),
attempt: 1,
maxAttempts: 3,
leaseExpiresAt: Date.now() + 60_000,
leaseTtlMs: 60_000,
traceId: 'trace-1',
correlationId: 'corr-1',
})
expect(result.ackCalls).toHaveLength(1)
expect(result.deadLetterCalls).toHaveLength(0)
} finally {
await harness.destroy()
}Use this level when you want to verify:
- before and after guards
- queue bridge acknowledgements
- retry or dead-letter behavior
