pg-context
TypeScript icon, indicating that this package has built-in type declarations

1.1.0 • Public • Published

pg-context

CircleCI

description

Create a postgres database in a context, when the context is disposed, the database is destroyed. This is ideal for testing purposes, you can easily create (and initialize!) a database when the test starts, and destroy the database when the test has finished.

usage

Using it with vanilla javascript.

import { PgContext } from "pg-context";

// prepare a script that will initialize the database
const sql = `
CREATE TABLE t (
    id serial primary key
);
INSERT INTO t DEFAULT VALUES;
`;

// create a context that will create a database for us.
const ctx = await PgContext.create(sql);
try {
    // the pool property of the context hold a pool for the created database
    const { pool } = ctx;
    const result = await pool.query(`SELECT * FROM t;`);
    
    // do some assertion or whatever tickles your fancy
    assert.equal(result.rowCount, 1);
}
finally {
    // cleanup the database that we created earlier
    await ctx.dispose();
}

You could simplfy this by using the dispose library.

import { using } from "dispose";
import { PgContext } from "pg-context";

// prepare a script that will initialize the database
const sql = `
CREATE TABLE t (
    id serial primary key
);
INSERT INTO t DEFAULT VALUES;
`;

// the using function will create and dispose then context for us 
using(PgContext.create(sql), async ctx => {
    // the pool property of the context hold a pool for the created database
    const {pool} = ctx;
    const result = await pool.query(`SELECT * FROM t;`);
    
    // do some assertion or whatever tickles your fancy
    assert.equal(result.rowCount, 1);
})

TODO: add mocha example

running the tests

To run the unit tests you will need a running postgresql databas server and you will need to provide connection details to the test. Run the test like this:

PGHOST=pg.host.com PGDATABASE=postgres PGUSER=postgres PGPASSWORD=supersecret npm test

pre-commit hook

You might want to link the test.sh script as a pre-push or pre-commit hook. This will make sure that your code is tested before every commit. This will prevent you breaking the build.

You can link the test.sh script to the pre-commit hook with the following command:

ln test.sh .git/hooks/pre-commit

If you use this git commit hook, you can bypass this hook with the --no-verify or -n option of git commit, like this:

git commit -nm'some commit message'

But beware, not testing === breaking builds! :-)

Versions

Current Tags

VersionDownloads (Last 7 Days)Tag
1.1.02latest

Version History

VersionDownloads (Last 7 Days)Published
1.1.02
1.0.140
1.0.130
1.0.110
1.0.40
1.0.10
1.0.00

Package Sidebar

Install

npm i pg-context

Weekly Downloads

2

Version

1.1.0

License

ISC

Unpacked Size

19.8 kB

Total Files

25

Last publish

Collaborators

  • elmerbulthuis
  • gameye-user