Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: add readme, instructions and explanation #6

Merged
merged 7 commits into from
Mar 18, 2024
Merged
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 23 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,23 @@
# jest-fixed-jsdom
<h1 align="center">jest-fixed-jsdom</h1>
<p align="center">This library helps re-attach missing NodeJS globals definitions in JSDOM that Jest strips out</p>

## Motivation

Jest strips out a number of NodeJS globals that are used in tests and libraries involving JSDOM, such as structuredClone, ReadableStream, and so on. This library patches these globals back in - there is no polyfilling or mocking involved, it simply re-attaches the missing globals to the JSDOM environment. If you've ever come across errors such as `ReferenceError: ReadableStream is not defined` or `ReferenceError: structuredClone is not defined`, this library is for you. If you were previously using (undici)[https://www.npmjs.com/package/undici] purely to solve this, you will no longer need it.

Copy link
Member

Choose a reason for hiding this comment

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

This is not entirely correct. There are a few things that happen in the Jest/JSDOM combo:

  • Some globals are stripped away, like ReadableSteam, TextEncoder, TextDecoder.
  • Some globals are present but are polyfilled by JSDOM or other libraries, making them incompatible with Node.js, e.g. Event and structuredClone().

If you want, I can help you rewrite this section. Let me know.

## Installation

`npm install jest-fixed-jsdom -D`

JamesZoft marked this conversation as resolved.
Show resolved Hide resolved
## Configuring your jest environment to use jest-fixed-jsdom

You will need to add/modify two properties in your jest configuration to use jest-fixed-jsdom.

```json
{
Copy link
Member

Choose a reason for hiding this comment

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

Would be nice to add a comment that mentions what file this is (jest.config.js).

"testEnvironment": "jest-fixed-jsdom"
}
```

Setting `testEnvironment` to `jest-fixed-jsdom` will tell Jest to use jest-fixed-jsdom as the test environment. Setting `customExportConditions` to an empty array will stop JSDOM from using the browser environment to load exports.

Loading