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;