Reputation: 7682
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.
Upvotes: 4
Views: 1191
Reputation: 10420
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
Upvotes: 1
Reputation: 7682
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']
};
Upvotes: 6