Skip to content

Redis Module

Redis The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker.

Install

npm install @testcontainers/redis --save-dev

Examples

it("should connect and execute set-get", async () => {

  const container = await new RedisContainer().start();



  const client = await connectTo(container);



  await client.set("key", "val");

  expect(await client.get("key")).toBe("val");



  await client.disconnect();

  await container.stop();

});
async function connectTo(container: StartedRedisContainer) {

  const client = createClient({

    url: container.getConnectionUrl(),

  });

  await client.connect();

  expect(client.isOpen).toBeTruthy();

  return client;

}
it("should start with credentials and login", async () => {

  const password = "testPassword";



  // Test authentication

  const container = await new RedisContainer().withPassword(password).start();

  expect(container.getConnectionUrl()).toEqual(`redis://:${password}@${container.getHost()}:${container.getPort()}`);



  const client = await connectTo(container);



  await client.set("key", "val");

  expect(await client.get("key")).toBe("val");



  await client.disconnect();

  await container.stop();

});
it("should reconnect with volume and persistence data", async () => {

  const sourcePath = fs.mkdtempSync(path.join(os.tmpdir(), "redis-"));

  const container = await new RedisContainer().withPassword("test").withPersistence(sourcePath).start();

  let client = await connectTo(container);



  await client.set("key", "val");

  await client.disconnect();

  await container.restart();

  client = await connectTo(container);

  expect(await client.get("key")).toBe("val");



  await client.disconnect();

  await container.stop();

  try {

    fs.rmSync(sourcePath, { force: true, recursive: true });

  } catch (e) {

    //Ignore clean up, when have no access on fs.

    console.log(e);

  }

});
it("should start with redis-stack-server and json module", async () => {

  const container = await new RedisContainer("redis/redis-stack-server:7.4.0-v4")

    .withPassword("testPassword")

    .start();

  const client = await connectTo(container);



  await client.json.set("key", "$", { name: "test" });

  const result = await client.json.get("key");

  expect(result).toEqual({ name: "test" });



  await client.disconnect();

  await container.stop();

});
it("should execute container cmd and return the result", async () => {

  const container = await new RedisContainer().start();



  const queryResult = await container.executeCliCmd("info", ["clients"]);

  expect(queryResult).toEqual(expect.stringContaining("connected_clients:1"));



  await container.stop();

});