Skip to content

Commit 3bb76fa

Browse files
committed
test(e2e): try to repro #12072
1 parent 2d78ee6 commit 3bb76fa

File tree

9 files changed

+980
-0
lines changed

9 files changed

+980
-0
lines changed

pnpm-lock.yaml

Lines changed: 871 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { expect, test } from "@/fixtures";
2+
3+
test("should load shared module in worker successfully", async ({ page }) => {
4+
// Wait for the worker to load the shared module and display the result
5+
await page.waitForSelector('div#worker-result:has-text("Worker: Shared value")');
6+
7+
// Check that the shared value from the worker was loaded and displayed
8+
const workerResultText = await page.locator('#worker-result:has-text("Shared value")').textContent();
9+
expect(workerResultText).toContain("Shared value from library");
10+
});
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
const { rspack } = require("@rspack/core");
2+
const { ModuleFederationPlugin } = require("@module-federation/enhanced/rspack");
3+
const path = require("path");
4+
5+
/** @type { import('@rspack/core').RspackOptions } */
6+
module.exports = {
7+
context: __dirname,
8+
mode: "development",
9+
entry: "./src/index.js",
10+
devtool: false,
11+
output: {
12+
filename: "[name].js",
13+
chunkFilename: "[name].chunk.js"
14+
},
15+
resolve: {
16+
alias: {
17+
"shared-lib": path.resolve(__dirname, "src/shared-lib")
18+
}
19+
},
20+
plugins: [
21+
new rspack.HtmlRspackPlugin({ template: "./src/index.html" }),
22+
new ModuleFederationPlugin({
23+
name: "host",
24+
filename: "remoteEntry.js",
25+
shared: {
26+
"shared-lib": {
27+
singleton: true,
28+
eager: false,
29+
requiredVersion: false
30+
}
31+
}
32+
})
33+
],
34+
devServer: {
35+
hot: false,
36+
port: 5680
37+
}
38+
};
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8" />
5+
<title>Module Federation Worker Test</title>
6+
</head>
7+
<body>
8+
<div id="root">Loading...</div>
9+
</body>
10+
</html>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Create a worker that uses a shared library
2+
const worker = new Worker(new URL("./worker.js", import.meta.url));
3+
4+
const root = document.getElementById("root");
5+
root.textContent = "Main thread loaded";
6+
7+
// Listen for messages from worker
8+
worker.addEventListener("message", (e) => {
9+
const workerResult = document.createElement("div");
10+
workerResult.id = "worker-result";
11+
workerResult.textContent = `Worker: ${e.data}`;
12+
root.appendChild(workerResult);
13+
});
14+
15+
// Listen for errors from worker
16+
worker.addEventListener("error", (e) => {
17+
const workerError = document.createElement("div");
18+
workerError.id = "worker-error";
19+
workerError.textContent = `Error: ${e.message}`;
20+
root.appendChild(workerError);
21+
console.error("Worker error:", e);
22+
});
23+
24+
// Send message to worker to trigger it
25+
worker.postMessage("start");
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export function getValue() {
2+
return "Shared value from library";
3+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export function getValue() {
2+
return "Shared value from library v1.0.0";
3+
}
4+
5+
export function getVersion() {
6+
return "1.0.0";
7+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Worker tries to import the shared library
2+
import("shared-lib").then((lib) => {
3+
self.addEventListener("message", (e) => {
4+
if (e.data === "start") {
5+
// Use the shared library and send result back
6+
self.postMessage(lib.getValue());
7+
}
8+
});
9+
10+
// Signal that worker is ready
11+
self.postMessage("Worker ready");
12+
}).catch((err) => {
13+
self.postMessage(`Worker import error: ${err.message}`);
14+
console.error("Worker failed to import shared-lib:", err);
15+
});

tests/e2e/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"devDependencies": {
1010
"@babel/core": "^7.28.5",
1111
"@babel/preset-react": "^7.27.1",
12+
"@module-federation/enhanced": "^0.21.2",
1213
"@playwright/test": "1.56.0",
1314
"core-js": "3.46.0",
1415
"@rspack/core": "workspace:*",

0 commit comments

Comments
 (0)