Zac*_*h G 2 postgresql node.js jestjs
我想测试 2 个 SQL 查询,一个 INSERT 和一个 SELECT。我想运行一个调用插入的测试,然后调用选择,这应该从插入返回数据。
我发现了一篇关于模拟 postgres 的stackoverflow 帖子,但我想实际运行 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();
}
})
});
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方式调用此测试:
TEST_DATABASE_URL=postgresql://sth:sth@someserver/testdb jest
Run Code Online (Sandbox Code Playgroud)
可以使用 来测试插入和选择RETURNING *
。
const { rows } = await client.query('INSERT INTO ... RETURNING *');
Run Code Online (Sandbox Code Playgroud)
使用BEGIN
andROLLBACK
是必要的 - 这样您就不会更改数据库并对下一个测试产生副作用。