#!/usr/bin/env -S node --import=tsx /** * Test runner entrypoint * * Entrypoint for running tests using Japa. */ process.env["NODE_ENV"] = "test" import { Ignitor, prettyPrintError } from "@adonisjs/core" import { configure, processCLIArgs, run } from "@japa/runner" import "reflect-metadata" /** * URL to the application root. AdonisJS need it to resolve paths to file and directories for scaffolding commands */ const APP_ROOT = new URL("../", import.meta.url) /** * The importer is used to import files in context of the application. */ const IMPORTER = async (filePath: string): Promise => { if (filePath.startsWith("./") || filePath.startsWith("../")) { return await import(new URL(filePath, APP_ROOT).href) } return await import(filePath) } const ignitor = new Ignitor(APP_ROOT, { importer: IMPORTER }) try { await ignitor .tap((app) => { app.booting(async () => { await import("#start/env.js") }) app.listen("SIGTERM", async () => { return await app.terminate() }) app.listenIf(app.managedByPm2, "SIGINT", async () => { return await app.terminate() }) }) .testRunner() .configure(async (app) => { const { runnerHooks, ...config } = await import("#tests/bootstrap.js") processCLIArgs(process.argv.splice(2)) configure({ ...app.rcFile.tests, ...config, ...{ setup: runnerHooks.setup, teardown: runnerHooks.teardown.concat([ async () => { return await app.terminate() }, ]), }, }) }) .run(async () => { return await run() }) } catch (error) { process.exitCode = 1 await prettyPrintError(error) }