diff --git a/packages/npm-packages/ruby-wasm-wasi/test-e2e/integrations/fixtures/recursive_require.rb b/packages/npm-packages/ruby-wasm-wasi/test-e2e/integrations/fixtures/recursive_require.rb
new file mode 100644
index 0000000000..c14cbb2386
--- /dev/null
+++ b/packages/npm-packages/ruby-wasm-wasi/test-e2e/integrations/fixtures/recursive_require.rb
@@ -0,0 +1 @@
+require_relative "./recursive_require/a.rb"
diff --git a/packages/npm-packages/ruby-wasm-wasi/test-e2e/integrations/fixtures/recursive_require/a.rb b/packages/npm-packages/ruby-wasm-wasi/test-e2e/integrations/fixtures/recursive_require/a.rb
new file mode 100644
index 0000000000..9f68c6a221
--- /dev/null
+++ b/packages/npm-packages/ruby-wasm-wasi/test-e2e/integrations/fixtures/recursive_require/a.rb
@@ -0,0 +1 @@
+require_relative "./b.rb"
diff --git a/packages/npm-packages/ruby-wasm-wasi/test-e2e/integrations/fixtures/recursive_require/b.rb b/packages/npm-packages/ruby-wasm-wasi/test-e2e/integrations/fixtures/recursive_require/b.rb
new file mode 100644
index 0000000000..511db1e29b
--- /dev/null
+++ b/packages/npm-packages/ruby-wasm-wasi/test-e2e/integrations/fixtures/recursive_require/b.rb
@@ -0,0 +1,7 @@
+module RecursiveRequire
+ class B
+ def message
+ "Hello from RecursiveRequire::B"
+ end
+ end
+end
diff --git a/packages/npm-packages/ruby-wasm-wasi/test-e2e/integrations/js-require-remote.spec.ts b/packages/npm-packages/ruby-wasm-wasi/test-e2e/integrations/js-require-remote.spec.ts
index 06e5306062..2bd1e0ed17 100644
--- a/packages/npm-packages/ruby-wasm-wasi/test-e2e/integrations/js-require-remote.spec.ts
+++ b/packages/npm-packages/ruby-wasm-wasi/test-e2e/integrations/js-require-remote.spec.ts
@@ -16,10 +16,13 @@ if (!process.env.RUBY_NPM_PACKAGE_ROOT) {
setupDebugLog(context);
setupProxy(context);
- context.route(/fixtures/, (route) => {
- const filename = path.basename(route.request().url());
+ const fixturesPattern = /fixtures\/(.+)/;
+ context.route(fixturesPattern, (route) => {
+ const subPath = route.request().url().match(fixturesPattern)[1];
+ const mockedPath = path.join("./test-e2e/integrations/fixtures", subPath);
+
route.fulfill({
- path: path.join("./test-e2e/integrations/fixtures", filename),
+ path: mockedPath,
});
});
@@ -89,5 +92,28 @@ if (!process.env.RUBY_NPM_PACKAGE_ROOT) {
const error = await page.waitForEvent("pageerror");
expect(error.message).toMatch(/cannot load such url -- .+\/not_found.rb/);
});
+
+ test("JS::RequireRemote#load recursively loads dependencies", async ({
+ page,
+ }) => {
+ const resolve = await resolveBinding(page, "checkResolved");
+ await page.goto(
+ "https://cdn.jsdelivr.net/npm/@ruby/head-wasm-wasi@latest/dist/",
+ );
+ await page.setContent(`
+
+
+ `);
+
+ expect(await resolve()).toBe("Hello from RecursiveRequire::B");
+ });
});
}