MySQL Module
MySQL is the world's most popular open source database. With its proven performance, reliability and ease-of-use, MySQL has become the leading database choice for web-based applications, covering the entire range from personal projects and websites, via e-commerce and information services, all the way to high profile web properties including Facebook, Twitter, YouTube, Yahoo! and many more.
Install
npm install @testcontainers/mysql --save-dev
Examples
it("should connect and execute query", async () => {
  const container = await new MySqlContainer().start();
  const client = await createConnection({
    host: container.getHost(),
    port: container.getPort(),
    database: container.getDatabase(),
    user: container.getUsername(),
    password: container.getUserPassword(),
  });
  const [rows] = await client.execute("SELECT 1 as res");
  expect(rows).toEqual([{ res: 1 }]);
  await client.end();
  await container.stop();
});
it("should work with database URI", async () => {
  const username = "testUser";
  const password = "testPassword";
  const database = "testDB";
  // Test non-root user
  const container = await new MySqlContainer()
    .withUsername(username)
    .withUserPassword(password)
    .withDatabase(database)
    .start();
  expect(container.getConnectionUri()).toEqual(
    `mysql://${username}:${password}@${container.getHost()}:${container.getPort()}/${database}`
  );
  await container.stop();
  // Test root user
  const rootContainer = await new MySqlContainer().withRootPassword(password).withDatabase(database).start();
  expect(rootContainer.getConnectionUri(true)).toEqual(
    `mysql://root:${password}@${rootContainer.getHost()}:${rootContainer.getPort()}/${database}`
  );
  await rootContainer.stop();
});
it("should set username", async () => {
  const container = await new MySqlContainer().withUsername("customUsername").start();
  const client = await createConnection({
    host: container.getHost(),
    port: container.getPort(),
    database: container.getDatabase(),
    user: container.getUsername(),
    password: container.getUserPassword(),
  });
  const [rows] = await client.execute("SELECT CURRENT_USER() as res");
  expect(rows).toEqual([{ res: "customUsername@%" }]);
  await client.end();
  await container.stop();
});
it("should execute a query and return the result", async () => {
  const container = await new MySqlContainer().start();
  const queryResult = await container.executeQuery("SELECT 1 as res");
  expect(queryResult).toEqual(expect.stringContaining("res\n1\n"));
  await container.stop();
});