From 7ce39b8608c3fd2e0f5a5c0264ed26649b86c8a7 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Tue, 27 Apr 2021 16:03:54 +0200 Subject: [PATCH] test: fix `common.mustCall` `length` and `name` properties Reassign `name` and `length` properties to the returned function to not break code that relies on it. PR-URL: https://github.com/nodejs/node/pull/38464 Reviewed-By: James M Snell Reviewed-By: Trivikram Kamat Reviewed-By: Rich Trott --- test/common/index.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/test/common/index.js b/test/common/index.js index f40914c94928dd..d67baa5caf0ad1 100644 --- a/test/common/index.js +++ b/test/common/index.js @@ -387,10 +387,28 @@ function _mustCallInner(fn, criteria = 1, field) { mustCallChecks.push(context); - return function() { + const _return = function() { // eslint-disable-line func-style context.actual++; return fn.apply(this, arguments); }; + // Function instances have own properties that may be relevant. + // Let's replicate those properties to the returned function. + // Refs: https://tc39.es/ecma262/#sec-function-instances + Object.defineProperties(_return, { + name: { + value: fn.name, + writable: false, + enumerable: false, + configurable: true, + }, + length: { + value: fn.length, + writable: false, + enumerable: false, + configurable: true, + }, + }); + return _return; } function hasMultiLocalhost() {