ð使用测试范围升级测试游戏
#database #测试 #testcontainers #sandboxes

作为软件开发人员,编写测试是我们日常工作的重要组成部分。我们需要确保我们的代码按预期工作,并且可以处理不同的方案。测试的一个重要方面是确保我们的代码正确与数据库交互。但是,使用真实数据库进行测试可能是一个挑战。设置,难以管理并且可能带来意外后果可能是耗时的。

这就是测试范围的进来! ð

TestContainers是一个开源库,可让您运行用于测试的容器。使用TestContainers,您可以在几秒钟内旋转数据库容器,运行测试并处理容器。它消除了设置真实数据库的麻烦,并确保您的测试是隔离和可重复的。

让我们看看如何使用TestContainers测试与数据库交互的代码。

ðâ简单示例:

让我们从一个简单的示例开始。我们将使用TestContainers运行PostgreSQL数据库,并编写测试以插入和从数据库中检索数据。首先,我们需要安装TestContainers和PostgreSQL客户端:

npm install --save-dev testcontainers jest pg

接下来,让我们写测试:

const { GenericContainer } = require('testcontainers');
const Client = require('pg').Client;

describe('Test database', () => {
  let client;
  let container;

  beforeAll(async () => {
    container = await new GenericContainer('postgres', '12')
      .withEnv('POSTGRES_USER', 'postgres')
      .withEnv('POSTGRES_PASSWORD', 'secret')
      .withExposedPorts(5432)
      .start();

    const host = await container.getContainerIpAddress();
    const port = container.getMappedPort(5432);
    const password = 'secret';
    const database = 'testdb';

    client = new Client({
      host,
      port,
      user: 'postgres',
      password,
      database,
    });

    await client.connect();
  });

  afterAll(async () => {
    await client.end();
    await container.stop();
  });

  test('Insert data into the database', async () => {
    await client.query('CREATE TABLE test (id serial, message text)');
    const res = await client.query("INSERT INTO test (message) values ('hello world')");
    expect(res.rowCount).toBe(1);
  });

  test('Retrieve data from the database', async () => {
    const res = await client.query('SELECT * FROM test');
    expect(res.rows[0].message).toBe('hello world');
  });
});

在此示例中,我们使用beforeall钩启动PostgreSQL容器并连接到数据库。余整钩停止容器并关闭连接。在测试中,我们使用客户端与数据库进行交互。

ð结论:

TestContainers是测试与数据库交互的代码的绝佳工具。它可以轻松旋转容器,运行测试并处理容器。使用TestContainers,您可以确保测试是隔离,可重复和快速的。尝试一下,并升级您的测试游戏! ð

在此处查看TestContainers库:TestContainers on GitHub

让我知道您是否有任何疑问或反馈! ð