From f0712bd213e1594febe18f0df25954fce15135e2 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Tue, 3 Oct 2023 19:49:19 +0200 Subject: [PATCH] feat: Adjust global hooks to work with both knex and objection --- packages/backend/src/types/global.d.ts | 5 ++++- packages/backend/test/setup/global-hooks.ts | 22 +++++++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/packages/backend/src/types/global.d.ts b/packages/backend/src/types/global.d.ts index 21bbd7cb..2770962d 100644 --- a/packages/backend/src/types/global.d.ts +++ b/packages/backend/src/types/global.d.ts @@ -1,8 +1,11 @@ import { Knex } from 'knex'; +import { Transaction } from 'objection'; declare global { declare namespace globalThis { // eslint-disable-next-line no-var - var knex: Knex; + var knexInstance: Knex; + // eslint-disable-next-line no-var + var knex: Transaction; } } diff --git a/packages/backend/test/setup/global-hooks.ts b/packages/backend/test/setup/global-hooks.ts index be1c2704..b7a19f64 100644 --- a/packages/backend/test/setup/global-hooks.ts +++ b/packages/backend/test/setup/global-hooks.ts @@ -1,17 +1,27 @@ +import { transaction, Model } from 'objection'; import { client as knex } from '../../src/config/database'; +import logger from '../../src/helpers/logger'; global.beforeAll(async () => { - global.knex = knex; + global.knexInstance = knex; + global.knex = null; + logger.silent = true; }); -global.beforeEach(async function () { - this.transaction = await global.knex.transaction(); +global.beforeEach(async () => { + // It's assigned as global.knex for the convenience even though + // it's a transaction. It's rolled back after each test. + // by assigning to knex, we can use it as knex.table('example') in tests files. + global.knex = await transaction.start(knex); + Model.knex(global.knex); }); -global.afterEach(async function () { - await this.transaction.rollback(); +global.afterEach(async () => { + await global.knex.rollback(); + Model.knex(knex); }); global.afterAll(async () => { - global.knex.destroy(); + global.knexInstance.destroy(); + logger.silent = false; });