Skip to content

Commit 16cb507

Browse files
committed
[fix] erroneous error message on browser ws error
1 parent 4af6751 commit 16cb507

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

src/protocols/websocket.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,10 @@ class WSNode extends RTWrapper {
9090
let err = error;
9191

9292
if (!(error instanceof Error)) {
93-
err = error ?
94-
new Error(error.message || error) : new Error('Unexpected error');
93+
// browser-side, the payload sent to this event is a generic "Event"
94+
// object bearing no information about the cause of the error
95+
err = error && (typeof Event === 'undefined' || !(error instanceof Event)) ?
96+
new Error(error.message || error) : new Error('Connection error');
9597
}
9698

9799
this.clientNetworkError(err);

test/protocol/websocket.test.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,26 @@ describe('WebSocket networking module', () => {
414414
should(websocket.wasConnected).be.false();
415415
});
416416

417+
it('should reject with a proper error if onerror is called with an event (browser)', () => {
418+
const Event = sinon.stub();
419+
Object.defineProperty(global, 'Event', {
420+
value: Event,
421+
enumerable: false,
422+
writable: false,
423+
configurable: true
424+
});
425+
426+
const promise = websocket.connect();
427+
websocket.client.onerror(new Event());
428+
429+
return should(promise).rejectedWith(Error, {message: 'Connection error'})
430+
.then(() => delete global.Event)
431+
.catch(e => {
432+
delete global.Event;
433+
throw e;
434+
});
435+
});
436+
417437
describe('#constructor', () => {
418438
it('should throw if an invalid host is provided', () => {
419439
const invalidHosts = [undefined, null, 123, false, true, [], {}, ''];

0 commit comments

Comments
 (0)