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`
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 35/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- À l'abandon
- Stack technique
- node.js, typescript
- Domaine
- databases, testing-qa
Piste de recherche
Commencez par exécuter npx vitest et lire db-setup.ts afin de reproduire l’échec isolé de la DB. Consultez l’issue execa liée pour comprendre le contexte de AbortSignal et setMaxListeners, puis vérifiez que le correctif choisi permet d’exécuter la suite de tests sans cette TypeError dans l’environnement jsdom.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
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, 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. However, I added this hack in the db-setup.ts file and it does work for me:
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
}
}
}
- Langage dominant
- TypeScript
- Étoiles
- 221
- Forks
- 61
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
NaturalIntelligence/fast-xml-parser#890 · 1 commentaire ·
Les mainteneurs répondent en général sous 3 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
zsviczian/obsidian-excalidraw-plugin#3000 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
pnpm/get.pnpm.io#68 ·
-
[BUG] Cloudflare KV binding 模式下 kvDriver.list() 沿用 EdgeOne 语义,字段名不匹配导致 key 格式下初始化 500 并耗尽 list 配额Peut-être pris @wumingzhinu l’a pris aujourd’hui. Ouvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 64/100
OpenListTeam/OpenList-Worker#125 ·
Les mainteneurs répondent en général sous 2 jours
-
Android (vision-camera-location): HybridLocationManager never quits its HandlerThread on disposeOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
margelo/react-native-vision-camera#4217 ·
Les mainteneurs répondent en général sous 4 jours