node.js - "ReferenceError: structuredClone är inte definierad" när man använder jest med nodejs och typescript
Jag kör tester med jest i en enkel NodeJS-app som använder TypeScript. Mitt test ger ett fel: ReferenceError: structuredClone är inte definierad.
Jag får inga linter-fel och koden kompilerar normalt utan problem.
const variableForValidation = structuredClone(variableForValidationUncloned);
package.json:
"dependencies": {
...
},
"devDependencies": {
"@types/jest": "^29.0.0",
"@types/node": "^18.7.15",
"@typescript-eslint/eslint-plugin": "^5.36.1",
"@typescript-eslint/parser": "^5.36.1",
"eslint": "^8.23.0",
"jest": "^28.0.1",
"nodemon": "^2.0.19",
"serverless-plugin-typescript": "^2.1.2",
"ts-jest": "^28.0.8",
"ts-node": "^10.9.1",
"typescript": "^4.8.2"
}
Detta GitHub-issue antyder för mig att problemet har lösts: https://github.com/facebook/jest/issues/12628 - eller kanske missförstår jag?
Jag har sett en liknande fråga på Stack men med Mocha: mocha känner inte igen structuredClone som inte är definierad
Svar #1
structuredClone lades till i Node 17.
Om du inte kan uppdatera fungerar JSON-tricket (stringify och sedan parse), men har vissa begränsningar som kan vara relevanta för dig:
- Rekursiva datastrukturer: JSON.stringify() kommer att kasta ett fel när du ger den en rekursiv datastruktur. Detta kan hända ganska lätt när man arbetar med länkade listor eller träd.
- Inbyggda typer: JSON.stringify() kommer att kasta ett fel om värdet innehåller andra inbyggda JS-typer som Map, Set, Date, RegExp eller ArrayBuffer.
- Funktioner: JSON.stringify() kommer tyst att kasta bort funktioner.
Redigera 2feb23:
Jag lärde mig nyligen om json-stringify-safe, som hjälper med det cirkulära problemet.
Redigera 24jan25:
Det finns andra alternativ, sorterade efter GitHub-stjärnor:
- Flight Controls superjson - 4,3k
- Yahoo:s serialize-javascript - 2,8k
- Rich Harris devaluerar - 2,2k
Svar #2
För samma fel löste det problemet för mig att ha koden nedan i testfilen.
global.structuredClone = (val) => JSON.parse(JSON.stringify(val))
Referens
