Allow web workers to pass tests

This commit is contained in:
Dustin Brett 2021-10-16 22:24:54 -07:00
parent 4f72053c66
commit 3664d7366b
6 changed files with 74 additions and 6 deletions

View File

@ -0,0 +1,40 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`renders main role 1`] = `
<div>
<main
class="StyledDesktop-sc-dxgv8o-0 gcQesV"
>
<ol
class="StyledFileManager-sc-v65khk-0 bumNlj"
/>
<nav
class="StyledTaskbar-sc-62k5ap-0 jonnHT"
tabindex="-1"
>
<button
class="Button-sc-1syhe5i-0 StyledStartButton-sc-mkvmmd-0 iTTbMn eQdgWS"
title="Start"
type="button"
>
<svg
viewBox="0 0 448 512"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z"
/>
</svg>
</button>
<ol
class="StyledTaskbarEntries-sc-vxgei1-0 eVzSCY"
/>
<time
class="StyledClock-sc-1plr57p-0 dpPYvM"
datetime=""
title=""
/>
</nav>
</main>
</div>
`;

View File

@ -1,13 +1,13 @@
import { render, screen } from "@testing-library/react";
import { render } from "@testing-library/react";
import StyledApp from "components/pages/StyledApp";
import Index from "pages/index";
test("renders main role", () => {
render(
const { container } = render(
<StyledApp>
<Index />
</StyledApp>
);
expect(screen.getByRole("main")).toBeInTheDocument();
expect(container).toMatchSnapshot();
});

View File

@ -1,5 +1,8 @@
module.exports = {
moduleDirectories: [".", "node_modules"],
setupFilesAfterEnv: ["@testing-library/jest-dom/extend-expect"],
setupFilesAfterEnv: [
"@testing-library/jest-dom/extend-expect",
"jsdom-worker",
],
testEnvironment: "jsdom",
};

View File

@ -78,6 +78,7 @@
"eslint-plugin-unicorn": "^36.0.0",
"husky": "^7.0.2",
"jest": "^27.2.5",
"jsdom-worker": "^0.2.1",
"lint-staged": "^11.2.2",
"monaco-editor": "^0.29.0",
"prettier": "^2.4.1",

View File

@ -15,14 +15,20 @@ const useWorker = <T extends unknown>(
setWorker(new Worker(workerUrl));
URL.revokeObjectURL(workerUrl);
URL.revokeObjectURL?.(workerUrl);
}, [workerFunction]);
useEffect(() => {
worker?.addEventListener("message", onMessage, { passive: true });
worker?.postMessage("init");
return () => worker?.terminate();
return () => {
try {
worker?.terminate();
} catch (error) {
if ((error as Error).message !== "Not Supported") throw error;
}
};
}, [onMessage, worker]);
};

View File

@ -4264,6 +4264,14 @@ js-yaml@^3.13.1:
argparse "^1.0.7"
esprima "^4.0.0"
jsdom-worker@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/jsdom-worker/-/jsdom-worker-0.2.1.tgz#bbea3dc012227b434bea8a22701871097bf50b94"
integrity sha512-LwGtjkIfbDObphy4lUJmmAmo5cM/WS8r1A61apecFeqkjUvOhhinxM8wQFS51ndR+6jXxzAX3bhxMOG3njckaw==
dependencies:
mitt "^1.1.3"
uuid-v4 "^0.1.0"
jsdom@^16.6.0:
version "16.7.0"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710"
@ -4757,6 +4765,11 @@ minimist@^1.2.0, minimist@^1.2.5:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
mitt@^1.1.3:
version "1.2.0"
resolved "https://registry.yarnpkg.com/mitt/-/mitt-1.2.0.tgz#cb24e6569c806e31bd4e3995787fe38a04fdf90d"
integrity sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==
monaco-editor@^0.29.0:
version "0.29.0"
resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.29.0.tgz#916b7be58e882c3b2a4a2f444688b583919e085e"
@ -6946,6 +6959,11 @@ util@^0.11.0:
dependencies:
inherits "2.0.3"
uuid-v4@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/uuid-v4/-/uuid-v4-0.1.0.tgz#62d7b310406f6cecfea1528c69f1e8e0bcec5a3a"
integrity sha1-YtezEEBvbOz+oVKMafHo4LzsWjo=
v8-compile-cache@^2.0.3, v8-compile-cache@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"