Skip to content

Commit c7054c2

Browse files
authored
mocha v10: fix failure handling (#8844)
Fixes error: An error occurred while bailing: TypeError: Cannot read property 'forEach' of undefined And subsequent error: An error occurred while bailing: TypeError: test.titlePath is not a function
1 parent a6b47e2 commit c7054c2

2 files changed

Lines changed: 15 additions & 11 deletions

File tree

bin/test-browser.js

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -86,20 +86,25 @@ class RemoteRunner {
8686
this.handlers.get(name).push(handler);
8787
}
8888

89+
triggerHandlers(eventName, handlerArgs) {
90+
const triggerHandler = handler => handler.apply(null, handlerArgs);
91+
92+
this.onceHandlers.get(eventName).forEach(triggerHandler);
93+
this.onceHandlers.delete(eventName);
94+
95+
this.handlers.get(eventName).forEach(triggerHandler);
96+
}
97+
8998
async handleEvent(event) {
9099
try {
91100
var additionalProps = ['pass', 'fail', 'pending'].indexOf(event.name) === -1 ? {} : {
92101
slow: event.obj.slow ? function () { return event.obj.slow; } : function () { return 60; },
93-
fullTitle: event.obj.fullTitle ? function () { return event.obj.fullTitle; } : undefined
102+
fullTitle: event.obj.fullTitle ? function () { return event.obj.fullTitle; } : undefined,
103+
titlePath: event.obj.titlePath ? function () { return event.obj.titlePath; } : undefined,
94104
};
95105
var obj = Object.assign({}, event.obj, additionalProps);
96106

97-
const triggerHandler = handler => handler(obj, event.err);
98-
99-
this.onceHandlers.get(event.name).forEach(triggerHandler);
100-
this.onceHandlers.delete(event.name);
101-
102-
this.handlers.get(event.name).forEach(triggerHandler);
107+
this.triggerHandlers(event.name, [ obj, event.err ]);
103108

104109
switch (event.name) {
105110
case 'fail': this.handleFailed(); break;
@@ -123,9 +128,7 @@ class RemoteRunner {
123128
handleFailed() {
124129
if (bail) {
125130
try {
126-
this.handlers['end'].forEach(function (handler) {
127-
handler();
128-
});
131+
this.triggerHandlers('end');
129132
} catch (e) {
130133
console.log('An error occurred while bailing:', e);
131134
} finally {

tests/integration/webrunner.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
title: obj.title,
2222
duration: obj.duration,
2323
slow: typeof obj.slow === 'function' ? obj.slow() : undefined,
24-
fullTitle: typeof obj.fullTitle === 'function' ? obj.fullTitle() : undefined
24+
fullTitle: typeof obj.fullTitle === 'function' ? obj.fullTitle() : undefined,
25+
titlePath: typeof obj.titlePath === 'function' ? obj.titlePath() : undefined,
2526
},
2627
err: err && {
2728
actual: err.actual,

0 commit comments

Comments
 (0)