Skip to content

test: add a simple test for import defer of a CJS module#64694

Open
MayaLekova wants to merge 1 commit into
nodejs:mainfrom
MayaLekova:import-defer-04-cjs
Open

test: add a simple test for import defer of a CJS module#64694
MayaLekova wants to merge 1 commit into
nodejs:mainfrom
MayaLekova:import-defer-04-cjs

Conversation

@MayaLekova

Copy link
Copy Markdown
Contributor

test: add a simple test for import defer of a CJS module

This tests imports a CommonJS modules with the defer modifier.
It ensures that the imported module is not evaluated before
accessing properties form its exports.

@nodejs-github-bot nodejs-github-bot added esm Issues and PRs related to the ECMAScript Modules implementation. needs-ci PRs that need a full CI run. test Issues and PRs related to the tests. labels Jul 23, 2026
@MayaLekova

Copy link
Copy Markdown
Contributor Author

@nicolo-ribaudo and @joyeecheung please take a look, thanks!

This tests imports a CommonJS modules with the `defer` modifier.
It ensures that the imported module is not evaluated before
accessing properties form its exports.

Signed-off-by: Maya Lekova <maya@igalia.com>
@MayaLekova
MayaLekova force-pushed the import-defer-04-cjs branch from de9e5ac to 2d51c34 Compare July 23, 2026 10:24
Comment on lines +22 to +23
assert.equal(imported.default.foo, 42);
assert.equal(imported.default.identifier, 'package-type-commonjs');

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
assert.equal(imported.default.foo, 42);
assert.equal(imported.default.identifier, 'package-type-commonjs');
assert.equal(imported.foo, 42);
assert.deepStrictEqual(['defer-1'], globalThis.eval_list);
assert.equal(imported.identifier, 'package-type-commonjs');

The lexer should recognize these. Also we should test that it only gets evaluated once.

assert.equal(imported.default.identifier, 'package-type-commonjs');

// Check that the module has been evaluated at this point.
assert.partialDeepStrictEqual(['defer-1'], globalThis.eval_list);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
assert.partialDeepStrictEqual(['defer-1'], globalThis.eval_list);
assert.deepStrictEqual(['defer-1'], globalThis.eval_list);

It shouldn't be partial, if there are anything else, it's a bug.


// Check that the module hasn't been evaluated yet (which is noted
// by adding a property to `globalThis.eval_list`).
assert.strictEqual(globalThis.eval_list.length, 0);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
assert.strictEqual(globalThis.eval_list.length, 0);
assert.deepStrictEqual(globalThis.eval_list, []);

@codecov

codecov Bot commented Jul 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.13%. Comparing base (4bec191) to head (2d51c34).
⚠️ Report is 22 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main   #64694   +/-   ##
=======================================
  Coverage   90.13%   90.13%           
=======================================
  Files         741      741           
  Lines      242106   242112    +6     
  Branches    45551    45595   +44     
=======================================
+ Hits       218211   218221   +10     
+ Misses      15430    15365   -65     
- Partials     8465     8526   +61     

see 50 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Comment on lines +4 to +6
if (!globalThis.eval_list) {
globalThis.eval_list = [];
}

@jasnell jasnell Jul 23, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tiniest optional nit...

globalThis.eval_list ??= ['defer-1'];

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

esm Issues and PRs related to the ECMAScript Modules implementation. needs-ci PRs that need a full CI run. test Issues and PRs related to the tests.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants