Вводный пример JavaScript для неинициированных Testcontainers с использованием библиотеки kafkajs
Возможно, вы чувствуете тему. В случае Kafka есть модуль для Node.js Testcontainers, но я столкнулся с несколькими острыми краями при настройке тестов на моем Macbook M1*, поэтому я подумал, что d поделиться своими результатами с остальной частью класса.
* Согласно нескольким сообщениям, которые я прочитал, мой M1 виноват в том, что стандартные контейнеры изображений Kafka часто не запускаются правильно. Мой собственный опыт подтверждает это.
Установка зависимостей
npm install testcontainers @testcontainers/kafka
Вам понадобится @testcontainers/kafka
, если вы используете версию 10+ testcontainers
, но в более старых версиях класс KafkaContainer
был доступен непосредственно из пакета testcontainers
.
Запуск и запуск тестовых контейнеров
Обратите внимание, что порт, отображаемый здесь, является портом TLS по умолчанию 9093. Кроме того, мне нужно было указать образ confluentinc/cp-kafka:latest
Docker, так как образ по умолчанию часто не загружался.
const { KafkaContainer } = require('@testcontainers/kafka'); const DEFAULT_KAFKA_PORT = 9093; const testKafkaContainer = async () => { let kafkaContainer; try { console.log(`Starting Kafka container...`); kafkaContainer = await new KafkaContainer('confluentinc/cp-kafka:latest') .withExposedPorts(DEFAULT_KAFKA_PORT) .start(); const port = kafkaContainer.getMappedPort(DEFAULT_KAFKA_PORT); const host = kafkaContainer.getHost(); console.log(`Running Kafka on ${host}:${port}...`); } finally { if (kafkaContainer) { console.log(`Stopping Kafka container...`); await kafkaContainer.stop(); } } }; testKafkaContainer();
Тестирование ваших тестовых контейнеров
Для создания/потребления* сообщений на рассматриваемом сервере Kafka с помощью kafkajs:
const { KafkaContainer } = require('@testcontainers/kafka'); const { Kafka } = require('kafkajs'); const DEFAULT_KAFKA_PORT = 9093; const testKafkaContainer = async () => { let kafkaContainer; try {…