From 0893c00d750e0a808664bbda61517b78e6d78225 Mon Sep 17 00:00:00 2001 From: Antonio Barcelos Date: Thu, 25 May 2023 12:09:49 +0200 Subject: [PATCH] Fix browser test in Node10 environment The window mock was broken because it miss `Symbol`, `Date` and other global definitions. Set the window as `globalThis` and then define the navigator in it solves the issue. A proper way of solving the issue will be use `jsdom`, however this plugin doesn't work in Node10. Also fixed an issue with timers getting hanging in some situations. The issue was catched by browser test with `--detectOpenHandles`. --- .../bolt-connection/src/channel/browser/browser-channel.js | 2 +- .../lib/bolt-connection/channel/browser/browser-channel.js | 2 +- .../test/integration/browser.environment.js | 7 +++---- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/bolt-connection/src/channel/browser/browser-channel.js b/packages/bolt-connection/src/channel/browser/browser-channel.js index ff5d1144e..c22e7fbb8 100644 --- a/packages/bolt-connection/src/channel/browser/browser-channel.js +++ b/packages/bolt-connection/src/channel/browser/browser-channel.js @@ -166,10 +166,10 @@ export default class WebSocketChannel { */ close () { return new Promise((resolve, reject) => { + this._clearConnectionTimeout() if (this._ws && this._ws.readyState !== WS_CLOSED) { this._open = false this.stopReceiveTimeout() - this._clearConnectionTimeout() this._ws.onclose = () => resolve() this._ws.close() } else { diff --git a/packages/neo4j-driver-deno/lib/bolt-connection/channel/browser/browser-channel.js b/packages/neo4j-driver-deno/lib/bolt-connection/channel/browser/browser-channel.js index 655461e61..c38443e46 100644 --- a/packages/neo4j-driver-deno/lib/bolt-connection/channel/browser/browser-channel.js +++ b/packages/neo4j-driver-deno/lib/bolt-connection/channel/browser/browser-channel.js @@ -166,10 +166,10 @@ export default class WebSocketChannel { */ close () { return new Promise((resolve, reject) => { + this._clearConnectionTimeout() if (this._ws && this._ws.readyState !== WS_CLOSED) { this._open = false this.stopReceiveTimeout() - this._clearConnectionTimeout() this._ws.onclose = () => resolve() this._ws.close() } else { diff --git a/packages/neo4j-driver-lite/test/integration/browser.environment.js b/packages/neo4j-driver-lite/test/integration/browser.environment.js index ddea458c4..8612ba539 100644 --- a/packages/neo4j-driver-lite/test/integration/browser.environment.js +++ b/packages/neo4j-driver-lite/test/integration/browser.environment.js @@ -23,10 +23,9 @@ class BrowserEnvironment extends NodeEnvironment { async setup () { await super.setup() this.global.WebSocket = WebSocket - this.global.window = { - navigator: { - userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' - } + this.global.window = globalThis + this.global.window.navigator = { + userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' } }