Dans mon application, j'utilise React et TypeScript. J'ai essayé d'exécuter des tests de plaisanterie, j'obtiens l'erreur suivante:
SyntaxError: Unexpected token { at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:537:17) at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:579:25)
Ce fichier n'est même pas testé. Je ne sais pas pourquoi il essaie de le compiler. Mon fichier jest.config.json
contient uniquement des seuils de couverture.
J'ai lu que la plaisanterie a parfois besoin d'une section de transformation supplémentaire pour des fichiers spécifiques comme SVG, mais lorsque j'ai ajouté à la configuration
"transform": { "^.+\\.svg$": "jest-svg-transformer" },
mon message d'erreur a changé uniquement pour:
C: \ Users \ e-KDKK \ workspace \ konrad \ mikskarpety \ test \ utils \ debounce.test.ts: 1 ({"Object.": Function (module, exports, require, __ dirname, __ filename, global, jest) { import {getVersion} de 'jest'; ^
C:\Users\e-KDKK\workspace\konrad\mikskarpety\src\images\icons\Sock.svg:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){<svg xmlns="http://www.w3.org/2000/svg" width="18.725" height="23.947" viewBox="0 0 18.725 23.947"> ^ SyntaxError: Unexpected token < 1 | import React, { FC } from 'react'; 2 | > 3 | import SockIcon from '../../images/icons/Sock.svg'; | ^ 4 | 5 | export const Spinner: FC = () => { 6 | return ( at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:537:17) at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:579:25) at Object.<anonymous> (src/components/Spinner/Spinner.tsx:3:1)
Ce qui est encore plus déroutant pour moi.
Le code de l'application vous pouvez trouver ici: https://github.com/KonradKlimczak/mikskarpety
4 Réponses :
jest ne sait pas comment charger d'autres extensions de fichiers que js / jsx, vous devez trouver le jest.config.js et ajouter un transformateur pour les fichiers svg.
module.exports = { process() { return 'module.exports = {};'; }, getCacheKey() { // The output is always the same. return 'svgTransform'; }, };
et créez le fichier svgTransform.js dans votre répertoire racine avec le contenu suivant.
"transform": { "^.+\\.tsx?$": "<rootDir>/node_modules/ts-jest/preprocessor.js", "^.+\\.svg$": "<rootDir>/svgTransform.js" },
lien: https://jestjs.io/docs/en/configuration.html#transform-object-string-string
Une autre option plus simple pour résoudre ce problème est jest-svg-transformer
.
Installez-le simplement: npm i jest-svg-transformer
ou yarn add jest-svg-transformer
Et ajoutez au jest.config.js à la section de la transformation:
"transform": { ... "^.+\\.svg$": "jest-svg-transformer" }
Une autre option (non spécifique à React) consiste à utiliser jest-transform-stub
car cela fonctionnera pour tout fichier non-JS souhaité.
{ "jest": { // .. "transform": { "^.+\\.js$": "babel-jest", ".+\\.(svg|css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$": "jest-transform-stub" } } }
Si vous recherchez toujours une solution simple, vous pouvez définir votre fichier fictif comme suit
{ "moduleNameMapper": { "^.+\\.svg$": "<rootDir>/__mocks__/svgMock.js" } }
Ensuite, dans le fichier jest.config, faites
// svgMock.js var createReactClass = require('create-react-class'); var Greeting = createReactClass({ render: function() { return null; } }); module.exports = Greeting;