Using the tools together

Each tool installs and runs on its own. None of them lists another as a dependency, and none of them needs another to be installed or running. Where two of them meet, one writes a file or serves a port that the other reads, and each side works without it. This page lists every place they meet and what each tool does when the other one is not there.

TogetherWhat you getWithout the other tool
workflow-tester + integration-mockrun --mock answers HTTP Request nodes from a local mock, offline; run --live runs the whole workflow on your n8n instance against itrun reports the cases that describe a mock as needing it and does not fail them. Every other case runs
workflow-lint → workflow-renderLint findings drawn as badges on the workflow pictureworkflow-lint writes its other formats; workflow-render draws the workflow without badges
integration-mock → workflow-render, workflow-testerThe redacted execution a snapshot saves is drawn, or captured, with no second call to the instanceBoth read an execution you export from n8n's API

workflow-tester and integration-mock

A test case uses the mock when it has given.packs, given.faults, given.seed, then.calls or then.noUnmatched. Only those cases do. A case whose only mock key is given.snapshot needs no running mock: offline, the execution saved beside the snapshot stands in for the nodes workflow-tester cannot run.

With both, offline (no n8n instance; HTTP Request nodes are answered by the mock):

integration-mock start
workflow-tester run --mock

With both, on your instance:

integration-mock start && integration-mock packs enable acme
export N8N_API_URL=https://n8n.example.com N8N_API_KEY=…
workflow-tester run --live

Without integration-mock:

You runThe cases that need the mockEvery other caseExit code
workflow-tester runReported as needing the mock, naming the keys and --mock or --live (· in the terminal, skipped in JUnit). Not failedRun as usualFrom the other cases only, --fail-on warn included
workflow-tester run --mock, mock not startedFail with cannot reach integration-mock at <url> — is it started?Run as usual1
workflow-tester run --live, mock not startedFail with cannot reach integration-mock at <url> — is it started?Run as usual1

To leave the mock out, run without --mock or --live. A test file without those keys never contacts it. Without workflow-tester, integration-mock is unchanged: you run your workflows against it in n8n yourself.

See Running offline against the mock and Running live against the mock.

workflow-lint and workflow-render

With both:

workflow-lint lint workflow.json --format canvas-overlay > findings.json
workflow-render export workflow.json -o workflow.png --overlay findings.json

Each node with a finding gets a ring and a count badge.

Without workflow-render, canvas-overlay is a plain JSON file, and every other format (stylish, json, sarif, junit, github-actions) needs nothing else. Without workflow-lint, leave out --overlay: the workflow is drawn exactly as it is with an empty overlay. Any tool, or you, can write an overlay.

The snapshot export

integration-mock snapshot saves the execution it used, redacted, as .integration-mock/snapshots/<workflow id>/<execution id>.export.json, whether or not you have the other tools.

With them:

workflow-render export .integration-mock/snapshots/<workflow id>/<execution id>.export.json -o run.svg
workflow-tester capture workflows/x.json --execution .integration-mock/snapshots/<workflow id>/<execution id>.export.json

Without integration-mock, save the execution from n8n's API (GET /api/v1/executions/<id>?includeData=true) and pass that file instead. See Capturing real runs.