NodeJS + PostgreSQL 集成测试

NodeJS + PostgreSQL integration testing

我想将 Postgres 交互包含到我的集成测试中,即不模拟数据库部分,我需要帮助找出进行测试清理的最佳方法。

我的设置是 NodeJS、Postgres、Sequelize、Karma+Mocha。目前,在 运行 测试之前创建并迁移一个新数据库,在每次测试之后我 运行 一个原始查询 t运行 对所有表进行分类,并且在所有测试用例完成之后测试数据库被删除。您可能已经猜到了,像这样的 运行ning 测试的执行时间非常慢。

我想知道是否有办法加快这个过程。是否有一个内存中的 psql 数据库可用于我的测试用例(我已经搜索了一段时间但找不到),或者类似的东西。

更准确地说,我正在寻找一种在测试向数据库写入内容后清除数据库的方法,这种方法不需要运行在每个测试用例后对所有表进行分类.

已将 合并到我的清理中:

afterEach(async () => {
  await db.sequelize.query(`
    DO
    $func$
    BEGIN
      EXECUTE
      (SELECT 'TRUNCATE TABLE ' || string_agg(oid::regclass::text, ', ') || ' RESTART IDENTITY CASCADE'
        FROM   pg_class
        WHERE  relkind = 'r'  -- only tables
        AND    relnamespace = 'public'::regnamespace
      );
    END
    $func$;
  `);
});

Truncate 现在几乎立即运行。