如何使用 Node.js / Jest 测试 Postgres 而不模拟 pg 导入

Zac*_*h G 2 postgresql node.js jestjs

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

我发现了一篇关于模拟 postgres 的stackoverflow 帖子,但我想实际运行 postgres 的测试实例,而不是模拟实际的查询。

mad*_*low 5

与 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)

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