Back to mocha!

sorry i ever left you dear mocha

node:test has two major issues:
* --bail does not work and requires strange modules and incantations.
I was able to work around this with a custom module.

* the test reporter reports _after_ the suite is run. this makes debugging
really hard. the debugs that we print all happen before the test suite summary.
poor design overall.
This commit is contained in:
Girish Ramakrishnan
2026-02-19 13:24:14 +01:00
parent c176ac600b
commit d0a66f1701
92 changed files with 778 additions and 228 deletions
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import assert from 'node:assert/strict';
import superagent from '@cloudron/superagent';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import applinks from '../../applinks.js';
import common from './common.js';
import assert from 'node:assert/strict';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import assert from 'node:assert/strict';
import superagent from '@cloudron/superagent';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import appstore from '../../appstore.js';
import common from './common.js';
import constants from '../../constants.js';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import archives from '../../archives.js';
import backups from '../../backups.js';
import common from './common.js';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import assert from 'node:assert/strict';
import superagent from '@cloudron/superagent';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import backupSites from '../../backupsites.js';
import common from './common.js';
import assert from 'node:assert/strict';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import constants from '../../constants.js';
import assert from 'node:assert/strict';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import constants from '../../constants.js';
import common from './common.js';
import assert from 'node:assert/strict';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import assert from 'node:assert/strict';
import superagent from '@cloudron/superagent';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import assert from 'node:assert/strict';
import superagent from '@cloudron/superagent';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import child_process from 'node:child_process';
import common from './common.js';
import assert from 'node:assert/strict';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import async from 'async';
import common from './common.js';
import eventlog from '../../eventlog.js';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import assert from 'node:assert/strict';
import superagent from '@cloudron/superagent';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import assert from 'node:assert/strict';
import superagent from '@cloudron/superagent';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import assert from 'node:assert/strict';
import mail from '../../mail.js';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import assert from 'node:assert/strict';
import superagent from '@cloudron/superagent';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import assert from 'node:assert/strict';
import notifications from '../../notifications.js';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import assert from 'node:assert/strict';
import superagent from '@cloudron/superagent';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import assert from 'node:assert/strict';
import fs from 'node:fs';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import appstore from '../../appstore.js';
import assert from 'node:assert/strict';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import constants from '../../constants.js';
import common from './common.js';
import { EventSource } from 'eventsource';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import assert from 'node:assert/strict';
import safe from 'safetydance';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import assert from 'node:assert/strict';
import superagent from '@cloudron/superagent';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import constants from '../../constants.js';
import assert from 'node:assert/strict';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import assert from 'node:assert/strict';
import superagent from '@cloudron/superagent';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import assert from 'node:assert/strict';
import fs from 'node:fs';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import assert from 'node:assert/strict';
import safe from 'safetydance';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import acme2 from '../acme2.js';
import common from './common.js';
import assert from 'node:assert/strict';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import addonConfigs from '../addonconfigs.js';
import common from './common.js';
import assert from 'node:assert/strict';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import applinks from '../applinks.js';
import BoxError from '../boxerror.js';
import common from './common.js';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import appPasswords from '../apppasswords.js';
import BoxError from '../boxerror.js';
import common from './common.js';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import apps from '../apps.js';
import AuditSource from '../auditsource.js';
import BoxError from '../boxerror.js';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import apptask from '../apptask.js';
import common from './common.js';
import assert from 'node:assert/strict';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import archives from '../archives.js';
import backups from '../backups.js';
import BoxError from '../boxerror.js';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import archives from '../archives.js';
import backupCleaner from '../backupcleaner.js';
import backups from '../backups.js';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import DataLayout from '../datalayout.js';
import tgz from '../backupformat/tgz.js';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import backupIntegrity from '../backupintegrity.js';
import backups from '../backups.js';
import backupSites from '../backupsites.js';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import backups from '../backups.js';
import BoxError from '../boxerror.js';
import common from './common.js';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import archives from '../archives.js';
import backups from '../backups.js';
import backupSites from '../backupsites.js';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import backups from '../backups.js';
import backupSites from '../backupsites.js';
import child_process from 'node:child_process';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import blobs from '../blobs.js';
import common from './common.js';
import assert from 'node:assert/strict';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import BoxError from '../boxerror.js';
import branding from '../branding.js';
import common from './common.js';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import BoxError from '../boxerror.js';
import common from './common.js';
import cloudron from '../cloudron.js';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import BoxError from '../boxerror.js';
import database from '../database.js';
import assert from 'node:assert/strict';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it } from 'node:test';
import { describe, it } from 'mocha';
import DataLayout from '../datalayout.js';
import assert from 'node:assert/strict';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import child_process from 'node:child_process';
import common from './common.js';
import df from '../df.js';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import async from 'async';
import common from './common.js';
import constants from '../constants.js';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after, beforeEach } from 'node:test';
/* jslint node:true */
import { describe, it, before, after, beforeEach } from 'mocha';
import common from './common.js';
import dns from '../dns.js';
import domains from '../domains.js';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import dns from '../dns.js';
import assert from 'node:assert/strict';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import docker from '../docker.js';
import assert from 'node:assert/strict';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import child_process from 'node:child_process';
import common from './common.js';
import constants from '../constants.js';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import dockerRegistries from '../dockerregistries.js';
import BoxError from '../boxerror.js';
import common from './common.js';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import apps from '../apps.js';
import BoxError from '../boxerror.js';
import common from './common.js';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import database from '../database.js';
import eventlog from '../eventlog.js';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import async from 'async';
import BoxError from '../boxerror.js';
import common from './common.js';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import BoxError from '../boxerror.js';
import common from './common.js';
import assert from 'node:assert/strict';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it } from 'node:test';
import { describe, it } from 'mocha';
import assert from 'node:assert/strict';
import ipaddr from '../ipaddr.js';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import assert from 'node:assert/strict';
import janitor from '../janitor.js';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import addonConfigs from '../addonconfigs.js';
import async from 'async';
import common from './common.js';
+2 -3
View File
@@ -1,12 +1,11 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import BoxError from '../boxerror.js';
import common from './common.js';
import assert from 'node:assert/strict';
import safe from 'safetydance';
import locks from '../locks.js';
describe('Locks', { timeout: 20000 }, function () {
describe('Locks', function () {
const { setup, cleanup } = common;
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it } from 'node:test';
import { describe, it } from 'mocha';
import assert from 'node:assert/strict';
import fs from 'node:fs';
import logs from '../logs.js';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import BoxError from '../boxerror.js';
import assert from 'node:assert/strict';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import mailPasswords from '../mailpasswords.js';
import BoxError from '../boxerror.js';
import common from './common.js';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import BoxError from '../boxerror.js';
import common from './common.js';
import assert from 'node:assert/strict';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import BoxError from '../boxerror.js';
import common from './common.js';
import assert from 'node:assert/strict';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import BoxError from '../boxerror.js';
import common from './common.js';
import assert from 'node:assert/strict';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it } from 'node:test';
import { describe, it } from 'mocha';
import BoxError from '../boxerror.js';
import assert from 'node:assert/strict';
import openssl from '../openssl.js';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import BoxError from '../boxerror.js';
import common from './common.js';
import assert from 'node:assert/strict';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it } from 'node:test';
import { describe, it } from 'mocha';
import assert from 'node:assert/strict';
import fs from 'node:fs';
import ProgressStream from '../progress-stream.js';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it } from 'node:test';
/* jslint node:true */
import { describe, it } from 'mocha';
import assert from 'node:assert/strict';
import promiseRetry from '../promise-retry.js';
import safe from 'safetydance';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import appstore from '../appstore.js';
import BoxError from '../boxerror.js';
import common from './common.js';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import domains from '../domains.js';
import assert from 'node:assert/strict';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import constants from '../constants.js';
import assert from 'node:assert/strict';
import safe from 'safetydance';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it } from 'node:test';
/* jslint node:true */
import { describe, it } from 'mocha';
import BoxError from '../boxerror.js';
import assert from 'node:assert/strict';
import path from 'node:path';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import backupSites from '../backupsites.js';
import BoxError from '../boxerror.js';
import common from './common.js';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it } from 'node:test';
import { describe, it } from 'mocha';
import assert from 'node:assert/strict';
import safe from 'safetydance';
import superagent from '@cloudron/superagent';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before } from 'node:test';
import { describe, it, before } from 'mocha';
import common from './common.js';
const { createTree } = common;
import DataLayout from '../datalayout.js';
+2 -3
View File
@@ -1,5 +1,4 @@
#!/usr/bin/env node
import { describe, it, after } from 'node:test';
import { describe, it, after } from 'mocha';
import assert from 'node:assert/strict';
import fs from 'node:fs';
@@ -32,7 +31,7 @@ async function verifyMessage(pattern, fileName) {
if (found === null) throw new Error(`${pattern} not found in ${fileName}`);
}
describe('Syslog', { timeout: 5000 }, function () {
describe('Syslog', function () {
after(async function () {
await syslogServer.stop();
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import child_process from 'node:child_process';
import common from './common.js';
import assert from 'node:assert/strict';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import BoxError from '../boxerror.js';
import common from './common.js';
import assert from 'node:assert/strict';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import BoxError from '../boxerror.js';
import common from './common.js';
import assert from 'node:assert/strict';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it } from 'node:test';
/* jslint node:true */
import { describe, it } from 'mocha';
import assert from 'node:assert/strict';
import translations from '../translations.js';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it } from 'node:test';
import { describe, it } from 'mocha';
import assert from 'node:assert/strict';
import _ from '../underscore.js';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import apps from '../apps.js';
import BoxError from '../boxerror.js';
import common from './common.js';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import common from './common.js';
import assert from 'node:assert/strict';
import oidcClients from '../oidcclients.js';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it, before, after } from 'node:test';
import { describe, it, before, after } from 'mocha';
import BoxError from '../boxerror.js';
import common from './common.js';
import assert from 'node:assert/strict';
+1 -2
View File
@@ -1,5 +1,4 @@
import { describe, it } from 'node:test';
import { describe, it } from 'mocha';
import assert from 'node:assert/strict';
import validator from '../validator.js';
+1 -3
View File
@@ -1,6 +1,4 @@
import { describe, it, before, after } from 'node:test';
/* jslint node:true */
import { describe, it, before, after } from 'mocha';
import BoxError from '../boxerror.js';
import common from './common.js';
import assert from 'node:assert/strict';