google-summer-of-code icon indicating copy to clipboard operation
google-summer-of-code copied to clipboard

[Idea]: use ES6 modules for running unit tests and benchmarks in web browsers

Open kgryte opened this issue 2 years ago • 6 comments

Idea

Currently, when generating stdlib API documentation, we generate UMD bundles for unit tests and benchmarks. When a user navigates to our package documentation, they can load unit tests and benchmarks and have those run without needing to setup a local environment. The pain point here is that creating separate bundles for each package is time consuming and adds significant heft to the www repo.

The goal of this idea is to refactor the way we support unit tests and benchmarks to use ES6 modules and potentially skip bundling altogether. This has the downside of not supporting older browsers which don't support the <module> tag, but is probably fine considering that running package unit tests and benchmarks is likely a forward looking concern.

Expected Outcomes

Users will be able to run unit tests and benchmarks directly in their web browsers by navigating to project API documentation and what is loaded are ES6 modules, not UMD bundles.

Involved Software

No other software is necessary.

Prerequisite Knowledge

JavaScript, Node.js, HTML/CSS, JSX/React.

Difficulty

Intermediate.

Project Length

350 hours.

Potential Mentors

@kgryte @Planeshifter @steff456

kgryte avatar Jan 11 '23 23:01 kgryte

@Planeshifter Now that we have UMD and ES Module builds in standalone repositories, this could be more straightforward, I believe, as we may be able to load directly using JSDelivr rather than the stdlib hosted server. What are your thoughts?

kgryte avatar Jan 30 '24 11:01 kgryte

@kgryte Yes, should be fairly straightforward to load the ES modules from JSDelivr. This project may be helped by writing own test runner as planned (https://github.com/stdlib-js/google-summer-of-code/issues/7).

Planeshifter avatar Jan 30 '24 22:01 Planeshifter

Good point. We'd need to account for 3rd party dev dependencies (e.g., tape, proxyquire, and the like).

kgryte avatar Jan 30 '24 22:01 kgryte