mirror of
https://github.com/docker/docs.git
synced 2026-03-27 14:28:47 +07:00
## Description Migrate 17 Testcontainers guides from testcontainers.com into the Docker docs site, covering Java (14 guides), .NET (2 guides), and Node.js (1 guide). This follows up on PR #24450 which added the initial Go and Python guides. Each guide is converted from AsciiDoc to Hugo Markdown, split into multi-chapter stepper navigation, updated to the latest Testcontainers API, and verified with passing tests running in containers. Java guides use testcontainers-java 2.0.4 with the new 2.x Maven coordinates and package names (e.g., `testcontainers-postgresql`, `org.testcontainers.postgresql.PostgreSQLContainer`). The Quarkus guide uses Quarkus 3.22.3 with TC 1.x managed by the Quarkus BOM, since no released Quarkus version ships TC 2.x yet. ## How to test All code snippets have been verified by running each guide's source repository tests inside Docker containers with the Docker socket mounted. To re-run the verification, use the `/testcontainers-guides-migrator` skill included in this PR (`.claude/skills/testcontainers-guides-migrator/SKILL.md`). The skill's Step 6 documents the exact container commands and macOS Docker Desktop workarounds (host override, docker-java API version, etc.) needed to run each language's tests: ``` /testcontainers-guides-migrator I want you to verify all the guides in this branch. Do a full review, verifying that all code snippets compile, the code is executable, and ALL the tests pass. Run them as docker containers, never locally. ``` ## Related issues or tickets Supersedes #24450 (expanded from 2 guides to all 19) ## Reviews - [ ] Technical review - [ ] Editorial review - [ ] Product review --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
63 lines
1.9 KiB
Markdown
63 lines
1.9 KiB
Markdown
---
|
|
title: Write tests with Testcontainers
|
|
linkTitle: Write tests
|
|
description: Write integration tests using Testcontainers for Node.js and Jest with a real PostgreSQL database.
|
|
weight: 20
|
|
---
|
|
|
|
Create `src/customer-repository.test.js` with the test:
|
|
|
|
```javascript
|
|
const { Client } = require("pg");
|
|
const { PostgreSqlContainer } = require("@testcontainers/postgresql");
|
|
const {
|
|
createCustomerTable,
|
|
createCustomer,
|
|
getCustomers,
|
|
} = require("./customer-repository");
|
|
|
|
describe("Customer Repository", () => {
|
|
jest.setTimeout(60000);
|
|
|
|
let postgresContainer;
|
|
let postgresClient;
|
|
|
|
beforeAll(async () => {
|
|
postgresContainer = await new PostgreSqlContainer().start();
|
|
postgresClient = new Client({
|
|
connectionString: postgresContainer.getConnectionUri(),
|
|
});
|
|
await postgresClient.connect();
|
|
await createCustomerTable(postgresClient);
|
|
});
|
|
|
|
afterAll(async () => {
|
|
await postgresClient.end();
|
|
await postgresContainer.stop();
|
|
});
|
|
|
|
it("should create and return multiple customers", async () => {
|
|
const customer1 = { id: 1, name: "John Doe" };
|
|
const customer2 = { id: 2, name: "Jane Doe" };
|
|
|
|
await createCustomer(postgresClient, customer1);
|
|
await createCustomer(postgresClient, customer2);
|
|
|
|
const customers = await getCustomers(postgresClient);
|
|
expect(customers).toEqual([customer1, customer2]);
|
|
});
|
|
});
|
|
```
|
|
|
|
Here's what the test does:
|
|
|
|
- The `beforeAll` block starts a real PostgreSQL container using
|
|
`PostgreSqlContainer`. It then creates a `pg` client connected to the
|
|
container and sets up the `customers` table.
|
|
- The `afterAll` block closes the client connection and stops the container.
|
|
- The test inserts two customers, fetches all customers, and asserts the
|
|
results match.
|
|
|
|
The test timeout is set to 60 seconds to allow time for the container to start
|
|
on the first run (when the Docker image needs to be pulled).
|