'Jest Angular svg template
I have several components in my Angular 9 app that have their templates defined in svg file like templateUrl: './eye.component.svg'
.
When I run tests it errors
SyntaxError: Unexpected token '<'
Jest encountered an unexpected token
This usually means that you are trying to import a file which Jest cannot parse, e.g. it's not plain JavaScript.
By default, if Jest sees a Babel config, it will use that to transform your files, ignoring "node_modules".
Here's what you can do:
• To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config. • If you need a custom transformation specify a "transform" option in your config. • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.
How is this supposed to be fixed? It's still a template which I need to test, but now I cannot even start these tests.
Solution 1:[1]
It turned out that I simply had to extend jest.config.js
transform
and moduleFileExtentions
with svg
and now it works just fine.
Here is how the config looks like after changes
module.exports = {
testMatch: ['**/+(*.)+(spec|test).+(ts|js)?(x)'],
transform: {
'^.+\\.(ts|js|html|svg)$': 'ts-jest'
},
resolver: '@nrwl/jest/plugins/resolver',
moduleFileExtensions: ['ts', 'js', 'html', 'svg'],
coverageReporters: ['html']
};
Solution 2:[2]
In your Jest config for ts-jest
you will likely have stringifyContentPathRegex
- try adding svg
to that value e.g.
stringifyContentPathRegex: '\\.(html|svg)$'
Example / more specifically:
"globals": {
"ts-jest": {
"tsconfig": "<rootDir>/tsconfig.spec.json",
"stringifyContentPathRegex": "\\.(html|svg)$"
}
}
Notes
- This worked for an Angular 12.x project
- And fwiw I tried various things including the accepted answer above, which didn't quite work for my case.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 |