Dapr is a CNCF and open-source project that enables developers with consistent application-level APIs to develop secure, scalable, and resilient cloud-native applications.
The Testcontainers Dapr module for NodeJS enables local development and testing of Dapr-enabled applications by providing a DaprContainer that sets up a Dapr sidecar instance. This container provides an in-memory implementation of Dapr APIs by default, facilitating testing without requiring a full Dapr installation or external dependencies.
A usage example can be found in src/DaprContainer.test.ts and src/WorkflowHarness.test.ts.
To use this library, add the dependency to your project:
npm install --save-dev @dapr/testcontainer-nodeBy default, the container uses Dapr version 1.18.4. You can override the Dapr runtime version globally for e2e testing using the DAPR_RUNTIME_VERSION environment variable:
export DAPR_RUNTIME_VERSION="1.18.4"You can also specify a custom image when instantiating containers:
import { DaprContainer, getDaprRuntimeImage } from "@dapr/testcontainer-node";
const dapr = new DaprContainer(getDaprRuntimeImage("1.18.4"));You can use WorkflowHarness or .withWorkflow() on DaprContainer to test Dapr Workflows with an automated Redis actor state store, placement service, and scheduler service:
import { WorkflowHarness } from "@dapr/testcontainer-node";
import { WorkflowRuntime, DaprWorkflowClient } from "@dapr/dapr";
const harness = new WorkflowHarness();
await harness.start();
const runtime = harness.createWorkflowRuntime();
runtime.registerWorkflow(myWorkflow);
runtime.registerActivity(myActivity);
await runtime.start();
const client = harness.createWorkflowClient();
const instanceId = await client.scheduleNewWorkflow(myWorkflow, "input");
const state = await client.waitForWorkflowCompletion(instanceId);
await harness.stop();This library follows Semantic Versioning.