From c25ada8dcb98315924745801fac7bea6acd645ec Mon Sep 17 00:00:00 2001 From: Matthias Urlichs Date: Wed, 13 Nov 2024 16:37:56 +0100 Subject: [PATCH] Propagate errors when testing Testing with Mocha requires errors raised within flows to propagate to the test runner, not getting swallowed by Node. This commit tests whether Mocha's global functions exist and, if they do, propagates exceptions that are raised there. --- package.json | 1 + packages/node_modules/@node-red/runtime/lib/flows/Flow.js | 4 ++++ packages/node_modules/@node-red/runtime/lib/nodes/Node.js | 4 ++++ 3 files changed, 9 insertions(+) diff --git a/package.json b/package.json index c7fe644f7..9e3ae8b42 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "cors": "2.8.5", "cronosjs": "1.7.1", "denque": "2.1.0", + "detect-mocha": "^0.1.0", "express": "4.21.1", "express-session": "1.18.1", "form-data": "4.0.0", diff --git a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js index c4f4e39a2..7ae5d7269 100644 --- a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js +++ b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js @@ -21,6 +21,7 @@ const flowUtil = require("./util"); const context = require('../nodes/context'); const hooks = require("@node-red/util").hooks; const credentials = require("../nodes/credentials"); +const detectMocha = require("detect-mocha"); let Subflow; let Log; @@ -804,6 +805,9 @@ function deliverMessageToDestination(sendEvent) { } catch(err) { Log.error(`Error delivering message to node:${sendEvent.destination.node._path} [${sendEvent.destination.node.type}]`) Log.error(err.stack) + if (detectMocha()) { + throw err; + } } } } diff --git a/packages/node_modules/@node-red/runtime/lib/nodes/Node.js b/packages/node_modules/@node-red/runtime/lib/nodes/Node.js index 0b1ed349b..0251ea9cb 100644 --- a/packages/node_modules/@node-red/runtime/lib/nodes/Node.js +++ b/packages/node_modules/@node-red/runtime/lib/nodes/Node.js @@ -21,6 +21,7 @@ var redUtil = require("@node-red/util").util; var Log = require("@node-red/util").log; var context = require("./context"); var flows = require("../flows"); +var detectMocha = require("detect-mocha"); const hooks = require("@node-red/util").hooks; @@ -218,6 +219,9 @@ Node.prototype._emitInput = function(arg) { ); } catch(err) { node.error(err,arg); + if (detectMocha()) { + throw err; + } } } else if (node._inputCallbacks) { // Multiple callbacks registered. Call each one, tracking eventual completion