gpt4 book ai didi

node.js - 如何在不模拟 pg 导入的情况下使用 Node.js/Jest 测试 Postgres

转载 作者:行者123 更新时间:2023-12-03 08:45:19 25 4
gpt4 key购买 nike

我有 2 个 SQL 查询想要测试,一个 INSERT 和一个 SELECT。我想运行一个调用插入的测试,然后调用选择,这应该从插入返回数据。

我找到了stackoverflow post关于模拟 postgres,但我想实际运行 postgres 的测试实例,而不是模拟实际的查询。

最佳答案

与 postgres 的集成测试可能如下所示:

const { Pool } = require('pg');

describe('testing postgres', () => {

let pgPool;

beforeAll(() => {
pgPool = new Pool({
connectionString: process.env.TEST_DATABASE_URL
});
});

afterAll(async () => {
await pgPool.end();
});

it('should test', async () => {
const client = await pgPool.connect();
try {
await client.query('BEGIN');

const { rows } = await client.query('SELECT 1 AS "result"');
expect(rows[0]["result"]).toBe(1);

await client.query('ROLLBACK');
} catch(err) {
throw err;
} finally {
client.release();
}

})

});

您可以使用以下方式调用此测试:

TEST_DATABASE_URL=postgresql://sth:sth@someserver/testdb jest

可以使用RETURNING *测试插入和选择。

     const { rows } = await client.query('INSERT INTO ... RETURNING *');

使用 BEGINROLLBACK 是必要的 - 这样您就不会更改数据库并对下一个测试产生副作用。

关于node.js - 如何在不模拟 pg 导入的情况下使用 Node.js/Jest 测试 Postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61720872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com