From a94f2e157b638274d2be1375fefe56c8937ebe1e Mon Sep 17 00:00:00 2001 From: Tiago Melo Date: Wed, 16 May 2018 11:31:31 +0100 Subject: [PATCH] mgr/dashboard: Add Jest Runner Signed-off-by: Tiago Melo --- src/pybind/mgr/dashboard/frontend/.babelrc | 3 +++ .../mgr/dashboard/frontend/package.json | 19 +++++++++++++++++++ .../dashboard/frontend/src/jestGlobalMocks.ts | 15 +++++++++++++++ .../mgr/dashboard/frontend/src/setupJest.ts | 12 ++++++++++++ .../mgr/dashboard/frontend/tsconfig.json | 10 +++------- 5 files changed, 52 insertions(+), 7 deletions(-) create mode 100644 src/pybind/mgr/dashboard/frontend/.babelrc create mode 100644 src/pybind/mgr/dashboard/frontend/src/jestGlobalMocks.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/setupJest.ts diff --git a/src/pybind/mgr/dashboard/frontend/.babelrc b/src/pybind/mgr/dashboard/frontend/.babelrc new file mode 100644 index 0000000000000..002b4aa0d58ec --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["env"] +} diff --git a/src/pybind/mgr/dashboard/frontend/package.json b/src/pybind/mgr/dashboard/frontend/package.json index 05754a6ce80d5..215dacd162974 100644 --- a/src/pybind/mgr/dashboard/frontend/package.json +++ b/src/pybind/mgr/dashboard/frontend/package.json @@ -12,6 +12,20 @@ "makePretty": "pretty-quick --staged" }, "private": true, + "jest": { + "preset": "jest-preset-angular", + "setupTestFrameworkScriptFile": "/src/setupJest.ts", + "transformIgnorePatterns": ["node_modules/(?!@ngrx|ngx-bootstrap|@progress)"], + "transform": { + "^.+\\.(ts|html)$": "/node_modules/jest-preset-angular/preprocessor.js", + "^.+\\.js$": "babel-jest" + }, + "setupFiles": ["jest-canvas-mock"], + "coverageReporters" : [ + "text", + "cobertura" + ] + }, "dependencies": { "@angular/animations": "^5.0.0", "@angular/common": "^5.0.0", @@ -43,11 +57,16 @@ "@angular/language-service": "^5.0.0", "@types/jasmine": "~2.5.53", "@types/jasminewd2": "~2.0.2", + "@types/jest": "^22.2.3", "@types/node": "~6.0.60", + "babel-preset-env": "^1.7.0", "codelyzer": "^4.0.1", "copy-webpack-plugin": "4.3.0", "jasmine-core": "~2.6.2", "jasmine-spec-reporter": "~4.1.0", + "jest": "^22.4.3", + "jest-canvas-mock": "^1.0.2", + "jest-preset-angular": "^5.2.2", "karma": "~1.7.0", "karma-chrome-launcher": "~2.1.1", "karma-cli": "~1.0.1", diff --git a/src/pybind/mgr/dashboard/frontend/src/jestGlobalMocks.ts b/src/pybind/mgr/dashboard/frontend/src/jestGlobalMocks.ts new file mode 100644 index 0000000000000..5486d7c9a0a3f --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/src/jestGlobalMocks.ts @@ -0,0 +1,15 @@ +const mock = () => { + let storage = {}; + return { + getItem: key => key in storage ? storage[key] : null, + setItem: (key, value) => storage[key] = value || '', + removeItem: key => delete storage[key], + clear: () => storage = {}, + }; +}; + +Object.defineProperty(window, 'localStorage', {value: mock()}); +Object.defineProperty(window, 'sessionStorage', {value: mock()}); +Object.defineProperty(window, 'getComputedStyle', { + value: () => ['-webkit-appearance'] +}); diff --git a/src/pybind/mgr/dashboard/frontend/src/setupJest.ts b/src/pybind/mgr/dashboard/frontend/src/setupJest.ts new file mode 100644 index 0000000000000..c5e3f7e8de055 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/src/setupJest.ts @@ -0,0 +1,12 @@ +import 'jest-preset-angular'; +import 'jest-zone-patch'; + +// common rxjs imports +import 'rxjs/add/observable/throw'; +import 'rxjs/add/operator/catch'; +import 'rxjs/add/operator/do'; +import 'rxjs/add/operator/map'; +import 'rxjs/add/operator/switchMap'; +// ... + +import './jestGlobalMocks'; diff --git a/src/pybind/mgr/dashboard/frontend/tsconfig.json b/src/pybind/mgr/dashboard/frontend/tsconfig.json index a6c016bf38ad7..7004efcc201c6 100644 --- a/src/pybind/mgr/dashboard/frontend/tsconfig.json +++ b/src/pybind/mgr/dashboard/frontend/tsconfig.json @@ -8,12 +8,8 @@ "emitDecoratorMetadata": true, "experimentalDecorators": true, "target": "es5", - "typeRoots": [ - "node_modules/@types" - ], - "lib": [ - "es2017", - "dom" - ] + "typeRoots": ["node_modules/@types"], + "lib": ["es2017", "dom"], + "allowJs": true } } -- 2.39.5