node.js - TypeScript Jest misslyckas med TypeError: Class extends value undefined är inte en konstruktor eller null
Jag använder ts-jest för att skriva tester till mitt ts-node-projekt. Applikationen fungerar bra och det finns inga TypeScript-fel i IDE:n (VSCode). Men varje gång jag försöker köra min testsvit får jag följande felmeddelande
Test suite failed to run
TypeError: Class extends value undefined is not a constructor or null
Det pekar då på en slumpmässig klass i min kod. Jag förstår detta som ett cirkulärt beroendeproblem, och en snabb användning av Madge bekräftar att mitt projekt har flera cirkulära beroenden. Jag vet att detta är dålig kodkvalitet, men jag behöver bara att dessa tester körs. Min frustration är att koden tydligt kan köras trots dessa cirkulära beroenden, finns det något sätt att fixa detta eller inaktivera Jest från att misslyckas vid detta TypeError?
Svar #1
Typiskt beror detta på problem med cirkulära beroenden. Det förvirrande är att din kod fortfarande kan byggas och köras utan problem, men att testning av den avslöjar problemet.
Se till att din subklass och basklass inte importerar eller refererar till varandras filer och exporteringar.
Ett vanligt misstag är att exportera dina definitioner med index.ts som:
export * from './base-class'
export * from './sub-class'
export * from './utilities'
Sedan i din basklass importerar du med hjälp av index:
import { Utility } from './index'
Detta kommer att skapa ett cirkulärt beroende och kan orsaka problemet ovan. Försök istället att importera direkt från filer.
Svar #2
Mitt problem var felaktig JEST-modulnamnskartor konfiguration. Det fungerade för nästan alla användningsfall tills en dag, när de importeringar jag lade till i en fil visade sig vara för komplexa eller mitt test var annorlunda än alla andra tester. En mer specifik modulnamnskarta gjorde jobbet.
