diff --git a/server/__mocks__/bull.ts b/server/__mocks__/bull.ts new file mode 100644 index 0000000000..7c5c939d30 --- /dev/null +++ b/server/__mocks__/bull.ts @@ -0,0 +1,43 @@ +export default class Queue { + done() { + // + } + + on() { + // + } + + count() { + return 0; + } + + getDelayedCount() { + return 0; + } + + add = function (data: any) { + const job = this.createJob(data); + + if (!this.handler) { + throw Error( + "Mocking version requires handler to be set before first add()" + ); + } + + this.handler(job, this.done); + }; + + process = function (handler: any) { + if (this.handler) { + throw Error("Cannot define a handler more than once per Queue instance"); + } + + this.handler = handler; + }; + + createJob = function (data: any) { + return { + data: data, + }; + }; +} diff --git a/server/test/setup.ts b/server/test/setup.ts index cd8dcbfc4c..56ab305966 100644 --- a/server/test/setup.ts +++ b/server/test/setup.ts @@ -17,6 +17,8 @@ if (process.env.DATABASE_URL_TEST) { // so that sequelize uses the test config variables require("@server/database/sequelize"); +jest.mock("bull"); + // This is needed for the relative manual mock to be picked up jest.mock("../queues"); diff --git a/server/utils/queue.ts b/server/utils/queue.ts index 1732119a8e..a23be8e94f 100644 --- a/server/utils/queue.ts +++ b/server/utils/queue.ts @@ -41,9 +41,13 @@ export function createQueue( queue.on("failed", () => { Metrics.increment(`${prefix}.jobs.failed`); }); - setInterval(async () => { - Metrics.gauge(`${prefix}.count`, await queue.count()); - Metrics.gauge(`${prefix}.delayed_count`, await queue.getDelayedCount()); - }, 5 * 1000); + + if (env.ENVIRONMENT !== "test") { + setInterval(async () => { + Metrics.gauge(`${prefix}.count`, await queue.count()); + Metrics.gauge(`${prefix}.delayed_count`, await queue.getDelayedCount()); + }, 5 * 1000); + } + return queue; }