From 77a79bf588b6429a47c8f9a37bac018ae8453392 Mon Sep 17 00:00:00 2001 From: Manuel Friedli Date: Wed, 15 Mar 2017 02:22:24 +0100 Subject: [PATCH] Added a first simple test. That serves as a proof-of-concept and as a template for future tests. It's a start! --- .gitlab-ci.yml | 1 + config/karma-test-shim.js | 21 ++++++++++++++ config/karma.conf.js | 44 +++++++++++++++++++++++++++++ config/webpack.test.js | 52 +++++++++++++++++++++++++++++++++++ package.json | 6 +++- src/app/app.component.spec.ts | 16 +++++++++++ src/app/app.component.ts | 1 - 7 files changed, 139 insertions(+), 2 deletions(-) create mode 100644 config/karma-test-shim.js create mode 100644 config/karma.conf.js create mode 100644 config/webpack.test.js create mode 100644 src/app/app.component.spec.ts diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 58779de..cc71c7f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,6 +9,7 @@ build_job: script: - npm install - npm run build + - npm run test tags: - javascript except: diff --git a/config/karma-test-shim.js b/config/karma-test-shim.js new file mode 100644 index 0000000..4b98239 --- /dev/null +++ b/config/karma-test-shim.js @@ -0,0 +1,21 @@ +Error.stackTraceLimit = Infinity; + +require('core-js/es6'); +require('core-js/es7/reflect'); + +require('zone.js/dist/zone'); +require('zone.js/dist/long-stack-trace-zone'); +require('zone.js/dist/proxy'); +require('zone.js/dist/sync-test'); +require('zone.js/dist/jasmine-patch'); +require('zone.js/dist/async-test'); +require('zone.js/dist/fake-async-test'); + +var appContext = require.context('../src', true, /\.spec\.ts/); + +appContext.keys().forEach(appContext); + +var testing = require('@angular/core/testing'); +var browser = require('@angular/platform-browser-dynamic/testing'); + +testing.TestBed.initTestEnvironment(browser.BrowserDynamicTestingModule, browser.platformBrowserDynamicTesting()); diff --git a/config/karma.conf.js b/config/karma.conf.js new file mode 100644 index 0000000..6e27f4a --- /dev/null +++ b/config/karma.conf.js @@ -0,0 +1,44 @@ +var webpackConfig = require('./webpack.test'); + +module.exports = function (config) { + var _config = { + basePath: '', + + frameworks: ['jasmine'], + + files: [ + { + pattern: './config/karma-test-shim.js', + watched: false + } + ], + + preprocessors: { + './config/karma-test-shim.js': ['webpack', 'sourcemap'] + }, + + webpack: webpackConfig, + + webpackMiddleware: { + stats: 'errors-only' + }, + + webpackServer: { + noInfo: true + }, + + reporters: ['kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: false, + browsers: ['PhantomJS'], + singleRun: true, + phantomjsLauncher: { + // Have phantomjs exit if a ResourceError is encountered (useful if karma exits without killing phantom) + exitOnResourceError: true + } + }; + + config.set(_config); +}; diff --git a/config/webpack.test.js b/config/webpack.test.js new file mode 100644 index 0000000..d21659a --- /dev/null +++ b/config/webpack.test.js @@ -0,0 +1,52 @@ +var webpack = require('webpack'); +var helpers = require('./helpers'); + +module.exports = { + devtool: 'inline-source-map', + + resolve: { + extensions: ['.ts', '.js'] + }, + + module: { + rules: [ + { + test: /\.ts$/, + loaders: [ + { + loader: 'awesome-typescript-loader', + options: {configFileName: helpers.root('src', 'tsconfig.json')} + }, 'angular2-template-loader' + ] + }, + { + test: /\.html$/, + loader: 'html-loader' + + }, + { + test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/, + loader: 'null-loader' + }, + { + test: /\.css$/, + exclude: helpers.root('src', 'app'), + loader: 'null-loader' + }, + { + test: /\.css$/, + include: helpers.root('src', 'app'), + loader: 'raw-loader' + } + ] + }, + + plugins: [ + new webpack.ContextReplacementPlugin( + // The (\\|\/) piece accounts for path separators in *nix and Windows + /angular(\\|\/)core(\\|\/)(esm(\\|\/)src|src)(\\|\/)linker/, + helpers.root('./src'), // location of your src + {} // a map of your routes + ) + ] +}; diff --git a/package.json b/package.json index d15179b..d45f7c0 100644 --- a/package.json +++ b/package.json @@ -35,8 +35,8 @@ "punycode": "^1.4.0" }, "devDependencies": { - "@types/node": "^6.0.45", "@types/jasmine": "2.5.36", + "@types/node": "^6.0.45", "angular2-template-loader": "^0.6.0", "awesome-typescript-loader": "^3.0.4", "css-loader": "^0.26.1", @@ -47,10 +47,14 @@ "jasmine-core": "^2.4.1", "karma": "^1.2.0", "karma-chrome-launcher": "^2.0.0", + "karma-firefox-launcher": "^1.0.1", "karma-jasmine": "^1.0.2", + "karma-jasmine-html-reporter": "^0.2.2", + "karma-phantomjs-launcher": "^1.0.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^2.0.1", "null-loader": "^0.1.1", + "phantomjs-prebuilt": "^2.1.14", "raw-loader": "^0.5.1", "rimraf": "^2.5.2", "style-loader": "^0.13.1", diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts new file mode 100644 index 0000000..cbce41a --- /dev/null +++ b/src/app/app.component.spec.ts @@ -0,0 +1,16 @@ +import {TestBed} from "@angular/core/testing"; +import {AppComponent} from "./app.component"; +import {FormsModule} from "@angular/forms"; + +describe('App', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [AppComponent], + imports: [FormsModule] + }); + }); + it('should work', () => { + let fixture = TestBed.createComponent(AppComponent); + expect(fixture.componentInstance instanceof AppComponent).toBe(true, 'should create AppComponent'); + }); +}); \ No newline at end of file diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 6755491..2935c7e 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -4,7 +4,6 @@ import {InputComponentManagerService} from "./inputcomponentmanager.service"; import {Converter} from "./converter/converter"; import {NativeLibraryWrapperService} from "./nativelibrarywrapper.service"; import {Step} from "./step"; - import "../assets/css/style.css"; @Component({