"Maximum call stack size exceeded" running in Jest

Aperta
#1,895 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
javascript, node.js
Ambito
testing-qa

Direzione di ricerca

Inizia leggendo lib/diff_line.js e riproduci il fallimento rieseguendo i test interessati in Jest watch mode. Traccia come vengono assegnati content e rawContent durante caricamenti ripetuti del modulo; il lavoro è completato quando le esecuzioni ripetute non ricorrono più fino a causare l’overflow dello stack delle chiamate, mentre la prima esecuzione continua a passare.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Having issues re-running some tests in Jest due to this line:

    RangeError: Maximum call stack size exceeded

      at DiffLine.Object.<anonymous>.DiffLine.content (node_modules/nodegit/dist/diff_line.js:13:13)
      at DiffLine.Object.<anonymous>.DiffLine.rawContent (node_modules/nodegit/dist/diff_line.js:29:22)
      at DiffLine.Object.<anonymous>.DiffLine.content (node_modules/nodegit/dist/diff_line.js:18:44)
      at DiffLine.Object.<anonymous>.DiffLine.rawContent (node_modules/nodegit/dist/diff_line.js:29:22)
      at DiffLine.Object.<anonymous>.DiffLine.content (node_modules/nodegit/dist/diff_line.js:18:44)
      at DiffLine.Object.<anonymous>.DiffLine.rawContent (node_modules/nodegit/dist/diff_line.js:29:22)
      at DiffLine.Object.<anonymous>.DiffLine.content (node_modules/nodegit/dist/diff_line.js:18:44)

Looks like prototype.content is reimplementing "native" content in JS land. But in doing so, it assumes the module is never "re-required" which is not always the case when running tests in Jest. When the module is imported the second time, _rawContent is referencing the JS implementation from the previous "require" and causing it to go into an infinite loop.

Just to be clear, the first run passes without issues. It's every run after that in watch mode that is an issue. I believe this is because the native modules are not reset between runs so closure over cached references isn't predictable.

A quick and dirty hack that fixes the issue:

var _rawContent = DiffLine._content = DiffLine._content || DiffLine.prototype.content;

Would this make an acceptable pull request? Or do you have a better way of addressing this issue?

System information

  • node version: v16.13.0
  • npm or yarn version: 8.3.0
  • OS/version/architecture: darwin 21.3.0 arm64
  • Applicable nodegit version: 0.28.0-alpha.11
Lingua principale
JavaScript
Stelle
5.8k
Fork
704
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di nodegit/nodegit

Tutte le issue di nodegit/nodegit

Issue simili

Altre issue su JavaScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.