| title | AST transformers option |
|---|
ts-jest by default does hoisting for a few jest methods via a TypeScript AST transformer. One can also create custom
TypeScript AST transformers and provide them to ts-jest to include into compilation process.
The option is astTransformers and it allows ones to specify which 3 types of TypeScript AST transformers to use with ts-jest:
beforemeans your transformers get run before TS ones, which means your transformers will get raw TS syntax instead of transpiled syntax (e.gimportinstead ofrequireordefine).aftermeans your transformers get run after TS ones, which gets transpiled syntax.afterDeclarationsmeans your transformers get run duringd.tsgeneration phase, allowing you to transform output type declarations.
// jest.config.js
module.exports = {
// [...]
globals: {
'ts-jest': {
astTransformers: {
before: ['my-custom-transformer'],
},
},
},
}// OR package.json
{
// [...]
"jest": {
"globals": {
"ts-jest": {
astTransformers: {
"before": ["my-custom-transformer"]
}
}
}
}
}// jest.config.js
module.exports = {
// [...]
globals: {
'ts-jest': {
astTransformers: {
before: [
{
path: 'my-custom-transformer-that-needs-extra-opts',
options: {}, // extra options to pass to transformers here
},
],
},
},
},
}// OR package.json
{
// [...]
"jest": {
"globals": {
"ts-jest": {
astTransformers: {
"before": [{
path: 'my-custom-transformer-that-needs-extra-opts',
options: {} // extra options to pass to transformers here
}]
}
}
}
}
}ts-jest is able to expose transformers for public usage to provide the possibility to opt-in/out for users. Currently
the exposed transformers are:
path-mappingconvert alias import/export to relative import/export path base onpathsintsconfig. This transformer works similar tomoduleNameMapperinjest.config.js. When using this transformer, one might not needmoduleNameMapperanymore.
// jest.config.js
module.exports = {
// [...]
globals: {
'ts-jest': {
astTransformers: {
before: ['ts-jest/dist/transformers/path-mapping'],
},
},
},
}// OR package.json
{
// [...]
"jest": {
"globals": {
"ts-jest": {
astTransformers: {
"before": ["ts-jest/dist/transformers/path-mapping"]
}
}
}
}
}To write a custom TypeScript AST transformers, one can take a look at the one that ts-jest is using.