Skip to content

Commit 4f34333

Browse files
committed
feat: alternative setup with babel/typescript
1 parent 24045bc commit 4f34333

File tree

10 files changed

+647
-352
lines changed

10 files changed

+647
-352
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
* (**BREAKING**): Restructure project with `src` and `build` folder ([#307](https://github.com/thymikee/jest-preset-angular/pull/307)).
66
* (**BREAKING**): Support `tsconfig.spec.json` in root folder by default ([#309](https://github.com/thymikee/jest-preset-angular/pull/309)).
77
* (**BREAKING**): Remove `core-js` peer dependency and instead add it as direct dependency ([#311](https://github.com/thymikee/jest-preset-angular/pull/309)).
8+
* (**BREAKING?**): Add preset `babel` instead of `ts-jest` ([#317](https://github.com/thymikee/jest-preset-angular/pull/317)).
89

910
#### Chore && Maintenance
1011
* Update example app to match Angular 8 Boilerplate ([#311](https://github.com/thymikee/jest-preset-angular/pull/309)).

babel/babel.config.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module.exports = api => ({
2+
presets: [
3+
'@babel/preset-env',
4+
'@babel/preset-typescript'
5+
],
6+
plugins: [
7+
['@babel/plugin-proposal-decorators', {legacy: true}],
8+
['babel-plugin-transform-typescript-metadata', {loose: true}],
9+
['@babel/plugin-proposal-class-properties', {loose: true}],
10+
['jest-preset-angular/babel/inline-template.plugin']
11+
]
12+
});

babel/inline-template.plugin.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
const { types } = require('@babel/core')
2+
3+
module.exports = (_api) => ({
4+
visitor: {
5+
ObjectProperty(path) {
6+
const node = path.node
7+
if (!types.isIdentifier(node.key)) return
8+
if (node.key.name !== 'templateUrl') return
9+
if (!types.isStringLiteral(node.value)) return
10+
const requireIdentifier = types.identifier('require')
11+
let templateUrl = node.value.value
12+
if (!templateUrl.match(/^(\.\/|\.\.\/|\/)/)) {
13+
templateUrl = `./${templateUrl}`
14+
}
15+
const templateUrlStringLiteral = types.stringLiteral(templateUrl)
16+
const templateCallExpr = types.callExpression(requireIdentifier, [templateUrlStringLiteral])
17+
const templateIdentifier = types.identifier('template')
18+
const templateProperty = types.objectProperty(templateIdentifier, templateCallExpr)
19+
path.replaceWith(templateProperty)
20+
}
21+
}
22+
})

babel/jest-preset.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
module.exports = {
2+
transform: {
3+
'^.+\\.(html)$': 'jest-preset-angular/babel/load-html-transformer',
4+
'^.+\\.(ts|js)$': 'babel-jest'
5+
},
6+
testEnvironment: 'jest-environment-jsdom-thirteen',
7+
moduleFileExtensions: ['ts', 'html', 'js', 'json'],
8+
moduleNameMapper: {
9+
'^src/(.*)$': '<rootDir>/src/$1',
10+
'^app/(.*)$': '<rootDir>/src/app/$1',
11+
'^assets/(.*)$': '<rootDir>/src/assets/$1',
12+
'^environments/(.*)$': '<rootDir>/src/environments/$1',
13+
},
14+
transformIgnorePatterns: ['node_modules/(?!@ngrx)'],
15+
snapshotSerializers: [
16+
'jest-preset-angular/build/AngularNoNgAttributesSnapshotSerializer.js',
17+
'jest-preset-angular/build/AngularSnapshotSerializer.js',
18+
'jest-preset-angular/build/HTMLCommentSerializer.js',
19+
],
20+
};

babel/load-html-transformer.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = {
2+
process: src => ({ code: `module.exports=`+JSON.stringify(src) })
3+
};

example/babel.config.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const babelAngularConfig = require('jest-preset-angular/babel/babel.config')
2+
module.exports = api => {
3+
api.cache(true)
4+
return babelAngularConfig(api)
5+
}
6+

example/package.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,15 @@
2323
"@angular/platform-browser": "~8.2.5",
2424
"@angular/platform-browser-dynamic": "~8.2.5",
2525
"@angular/router": "~8.2.5",
26+
"@babel/core": "^7.6.2",
27+
"@babel/plugin-proposal-class-properties": "^7.5.5",
28+
"@babel/plugin-proposal-decorators": "^7.6.0",
29+
"@babel/preset-env": "^7.6.2",
30+
"@babel/preset-typescript": "^7.6.0",
31+
"babel-jest": "^24.9.0",
32+
"babel-plugin-transform-typescript-metadata": "^0.2.2",
2633
"rxjs": "~6.4.0",
34+
"ts-jest": "^24.1.0",
2735
"tslib": "^1.10.0",
2836
"zone.js": "~0.9.1"
2937
},
@@ -41,7 +49,7 @@
4149
"typescript": "~3.5.3"
4250
},
4351
"jest": {
44-
"preset": "jest-preset-angular",
52+
"preset": "jest-preset-angular/babel",
4553
"snapshotSerializers": [
4654
"jest-preset-angular/build/AngularNoNgAttributesSnapshotSerializer.js",
4755
"jest-preset-angular/build/AngularSnapshotSerializer.js",

0 commit comments

Comments
 (0)