From 156ae9f3fdff4d01d977f87b19ea7e87767d89df Mon Sep 17 00:00:00 2001 From: yaoweiprc <6896642+yaoweiprc@users.noreply.github.com> Date: Fri, 14 Mar 2025 08:13:55 +0800 Subject: [PATCH] Mock browser environment in vitest --- package-lock.json | 13 +++++++++++++ package.json | 1 + packages/insomnia/setup-vitest.ts | 22 ++++++++++++++++++++++ packages/insomnia/src/common/import.ts | 2 +- 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 1dfbc10aed..272faf13ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,7 @@ "@types/chai": "^4.3.14", "@types/eslint": "^8.56.7", "@types/har-format": "^1.2.15", + "@types/jsdom": "^21.1.7", "@types/mocha": "^10.0.6", "@types/node": "^20.12.4", "@typescript-eslint/eslint-plugin": "^7.5.0", @@ -6353,6 +6354,18 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/jsdom": { + "version": "21.1.7", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz", + "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, "node_modules/@types/jshint": { "version": "2.12.4", "resolved": "https://registry.npmjs.org/@types/jshint/-/jshint-2.12.4.tgz", diff --git a/package.json b/package.json index 480094f2fb..3772adf5bc 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "@types/chai": "^4.3.14", "@types/eslint": "^8.56.7", "@types/har-format": "^1.2.15", + "@types/jsdom": "^21.1.7", "@types/mocha": "^10.0.6", "@types/node": "^20.12.4", "@typescript-eslint/eslint-plugin": "^7.5.0", diff --git a/packages/insomnia/setup-vitest.ts b/packages/insomnia/setup-vitest.ts index feb70c481d..46fe4bef78 100644 --- a/packages/insomnia/setup-vitest.ts +++ b/packages/insomnia/setup-vitest.ts @@ -1,3 +1,4 @@ +import { JSDOM } from 'jsdom'; import { vi } from 'vitest'; import { nodeLibcurlMock } from './src/__mocks__/@getinsomnia/node-libcurl'; @@ -5,6 +6,7 @@ import { electronMock } from './src/__mocks__/electron'; import { database as db } from './src/common/database'; import * as models from './src/models'; import { v4Mock } from './src/models/__mocks__/uuid'; + await db.init(models.types(), { inMemoryOnly: true }, true, () => { },); vi.mock('electron', () => ({ default: electronMock })); @@ -21,3 +23,23 @@ vi.mock('isomorphic-git', async importOriginal => { clone: vi.fn(), }; }); + +const { + window, +} = new JSDOM('

Hello world

', { + url: 'https://example.org/', + referrer: 'https://example.com/', + contentType: 'text/html', + includeNodeLocations: true, + storageQuota: 10000000, +}); + +vi.stubGlobal('window', window); +[ + 'document', + 'navigator', + 'FileReader', + 'Blob', +].forEach((propName: string) => { + vi.stubGlobal(propName, window[propName]); +}); diff --git a/packages/insomnia/src/common/import.ts b/packages/insomnia/src/common/import.ts index 5d32e53b90..5e5bb22374 100644 --- a/packages/insomnia/src/common/import.ts +++ b/packages/insomnia/src/common/import.ts @@ -17,7 +17,7 @@ import { type WebSocketRequest, } from '../models/websocket-request'; import { isWorkspace, type Workspace } from '../models/workspace'; -import type { CurrentPlan } from '../ui/routes/organization'; +import { type CurrentPlan } from '../ui/routes/organization'; import { convert, type InsomniaImporter } from '../utils/importers/convert'; import { id as postmanEnvImporterId } from '../utils/importers/importers/postman-env'; import { invariant } from '../utils/invariant';