epicweb-dev / epicweb-dev/full-stack-testing

Isolated DB throws this error `TypeError: The "eventTargets" argument must be an instance of EventEmitter or EventTarget. Received an instance of AbortSignal` with `npx vitest`

Open
#39 5 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
221
Forks
61
PR merge metrics
No merged PRs in 30d

Description

`npx vitest` throws the following error "**TypeError: The "eventTargets" argument must be an instance of EventEmitter or EventTarget. Received an instance of AbortSignal**" with Isolated DB for testing.

A little bit of google searching landed me [here](https://github.com/sindresorhus/execa/issues/1123), which is the root cause of the problem. You can check out the link for more context. Apparently, `execa` version `9` which is the current version of the package in the project relies on `setMaxListeners` export from `node:events` which throws error in` jsdom` environment because the `AbortSignal` from jsdom's `AbortController` is not node.js `EventTarget`.

I'm not exactly sure the best way to fix this problem. Of course, one option would be to downgrade `execa` to version `8` but not sure if that's a good idea based on this [comment](https://github.com/sindresorhus/execa/issues/1123#issuecomment-2153463691). However, I added this hack in the `db-setup.ts` file and it does work for me:
```ts
const kEventTarget = Symbol.for('nodejs.event_target') // https://github.com/nodejs/node/blob/68c9f554ffa2fab1ef3b6466c51491371f0dd158/lib/internal/event_target.js#L50

if (globalThis.window !== undefined) {
const JSDOMAbortController = window.AbortController
window.AbortController = class extends JSDOMAbortController {
get signal() {
const signal = super.signal
if ('constructor' in signal) {
// @ts-expect-error
signal.constructor[kEventTarget] = true //
} else {
// @ts-expect-error
signal.constructor = { [kEventTarget]: true } //https://github.com/nodejs/node/blob/68c9f554ffa2fab1ef3b6466c51491371f0dd158/lib/internal/event_target.js#L1070
}
return signal
}
}
}
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.