diff --git a/src/browser/js/Env.zig b/src/browser/js/Env.zig
index 45452ffc..1fa807f8 100644
--- a/src/browser/js/Env.zig
+++ b/src/browser/js/Env.zig
@@ -620,7 +620,7 @@ test "Env: Worker context " {
const frame = try session.createPage();
defer session.removePage();
- const worker = try @import("../webapi/Worker.zig").init("http://localhost:9582/src/browser/tests/testing.js", frame);
+ const worker = try @import("../webapi/Worker.zig").init("http://localhost:9582/src/browser/tests/testing.js", null, frame);
var ls: js.Local.Scope = undefined;
worker._worker_scope.js.localScope(&ls);
diff --git a/src/browser/tests/worker/module-worker.js b/src/browser/tests/worker/module-worker.js
new file mode 100644
index 00000000..1b1aa7b6
--- /dev/null
+++ b/src/browser/tests/worker/module-worker.js
@@ -0,0 +1,25 @@
+// A module worker (`new Worker(url, { type: "module" })`). Unlike a classic
+// worker, the entry script may use top-level static `import`/`export`, and
+// `importScripts()` is not supported (it throws a TypeError).
+import { baseValue } from './modules/base.js';
+import { importedValue, localValue } from './modules/importer.js';
+
+export const exported = 'top-level-export-ok';
+
+let importScriptsError = null;
+try {
+ importScripts('./import-script1.js');
+} catch (e) {
+ importScriptsError = e.constructor.name;
+}
+
+onmessage = function (event) {
+ postMessage({
+ echo: event.data,
+ baseValue: baseValue,
+ importedValue: importedValue,
+ localValue: localValue,
+ importScriptsError: importScriptsError,
+ from: 'module-worker',
+ });
+};
diff --git a/src/browser/tests/worker/worker.html b/src/browser/tests/worker/worker.html
index cabe5d14..881c6b6c 100644
--- a/src/browser/tests/worker/worker.html
+++ b/src/browser/tests/worker/worker.html
@@ -380,6 +380,29 @@
}
+
+