SQLite Testing
The @databases/sqlite
module defaults to an in-memory database in node.js, meaning you can get an isolated database for every test run.
Jest
Assuming you have a file that looks like:
// db.js
import connect, {sql} from '@databases/sqlite';
export {sql};
const db = connect('./data');
export default db;
You can add a mock:
// db.mock.js
import connect, {sql} from '@databases/sqlite';
export {sql};
const db = connect(); // in memory db
export default db;
Then in you test, you can tell jest to use your mock:
jest.setMock('../db', require('../db.mock'));
import db, {sql} from '../db';
test('createUser', async () => {
await createUser('Joe Blogs', 'joe.blogs@example.com');
expect(await db.query(sql`SELECT name, email FROM users`)).toEqual([
{name: 'Joe Blogs', email: 'joe.blogs@example.com'},
]);
});
The nice thing about this is every test gets its own isolated copy of the database.