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 现在几乎立即运行。
我想将 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 现在几乎立即运行。