From 6ffbd638c5ae9175579ac2c0a4135961b3c042c8 Mon Sep 17 00:00:00 2001 From: Christoph Reiter <reiter.christoph@gmail.com> Date: Thu, 1 Aug 2019 15:17:51 +0200 Subject: [PATCH] Add unit test support using karma+mocha+chai --- packages/person-select/.gitlab-ci.yml | 3 ++- packages/person-select/README.md | 3 +++ packages/person-select/karma.conf.js | 23 +++++++++++++++++++++++ packages/person-select/package.json | 12 +++++++++++- packages/person-select/rollup.config.js | 6 ++++-- packages/person-select/test/unit.js | 19 +++++++++++++++++++ 6 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 packages/person-select/karma.conf.js create mode 100644 packages/person-select/test/unit.js diff --git a/packages/person-select/.gitlab-ci.yml b/packages/person-select/.gitlab-ci.yml index e7b6c123..9cadb871 100644 --- a/packages/person-select/.gitlab-ci.yml +++ b/packages/person-select/.gitlab-ci.yml @@ -14,6 +14,7 @@ test: stage: test script: - apt update - - apt install -y npm + - apt install -y npm chromium - npm install - npm run build + - npm test diff --git a/packages/person-select/README.md b/packages/person-select/README.md index 59d83e9c..65ca8fd8 100644 --- a/packages/person-select/README.md +++ b/packages/person-select/README.md @@ -15,6 +15,9 @@ npm install # constantly build dist/bundle.js and run a local web-server on port 8002 npm run watch-local + +# run tests +npm test ``` Jump to <http://localhost:8002> and you should get a Single Sign On login page. diff --git a/packages/person-select/karma.conf.js b/packages/person-select/karma.conf.js new file mode 100644 index 00000000..901e0780 --- /dev/null +++ b/packages/person-select/karma.conf.js @@ -0,0 +1,23 @@ +// Trick to use the auto-downloaded puppeteer chrome binary +process.env.CHROME_BIN = require('puppeteer').executablePath(); + +module.exports = function(config) { + config.set({ + basePath: 'dist', + frameworks: ['mocha', 'chai'], + files: [ + './bundle.js', + {pattern: './**/*', included: false, watched: true, served: true}, + ], + autoWatch: true, + browsers: ['ChromeHeadlessNoSandbox'], + customLaunchers: { + ChromeHeadlessNoSandbox: { + base: 'ChromeHeadless', + flags: ['--no-sandbox'] + } + }, + singleRun: false, + logLevel: config.LOG_ERROR + }); +} diff --git a/packages/person-select/package.json b/packages/person-select/package.json index 8f9d0574..7a5bccea 100644 --- a/packages/person-select/package.json +++ b/packages/person-select/package.json @@ -3,7 +3,14 @@ "version": "1.0.0", "main": "src/index.js", "devDependencies": { + "karma": "^4.2.0", + "karma-chai": "^0.1.0", + "karma-chrome-launcher": "^3.0.0", + "karma-mocha": "^1.3.0", "node-sass": "^4.12.0", + "puppeteer": "^1.15.0", + "mocha": "^6.2.0", + "chai": "^4.2.0", "rollup": "^1.11.3", "rollup-plugin-commonjs": "^9.3.4", "rollup-plugin-copy": "^2.0.1", @@ -13,6 +20,7 @@ "rollup-plugin-terser": "^4.0.4", "rollup-plugin-json": "^4.0.0", "rollup-plugin-replace": "^2.2.0", + "rollup-plugin-multi-entry": "^2.1.0", "i18next-scanner": "^2.10.2", "vpu-auth": "file:./vendor/auth", "vpu-common": "file:./vendor/common" @@ -31,9 +39,11 @@ "build-dev": "rollup -c --environment BUILD:development", "build-prod": "rollup -c --environment BUILD:production", "build-demo": "rollup -c --environment BUILD:demo", + "build-test": "rollup -c --environment BUILD:test", "i18next": "i18next-scanner", "watch": "npm run watch-local", "watch-local": "rollup -c --watch", - "watch-dev": "rollup -c --watch --environment BUILD:development" + "watch-dev": "rollup -c --watch --environment BUILD:development", + "test": "npm run build-test && karma start --singleRun" } } diff --git a/packages/person-select/rollup.config.js b/packages/person-select/rollup.config.js index cd666342..593fbce3 100644 --- a/packages/person-select/rollup.config.js +++ b/packages/person-select/rollup.config.js @@ -6,17 +6,19 @@ import {terser} from "rollup-plugin-terser"; import json from 'rollup-plugin-json'; import replace from "rollup-plugin-replace"; import serve from 'rollup-plugin-serve'; +import multiEntry from 'rollup-plugin-multi-entry'; const build = (typeof process.env.BUILD !== 'undefined') ? process.env.BUILD : 'local'; console.log("build: " + build); export default { - input: 'src/demo.js', + input: (build != 'test') ? 'src/demo.js' : 'test/**/*.js', output: { file: 'dist/bundle.js', format: 'esm' }, plugins: [ + multiEntry(), resolve(), commonjs(), json(), @@ -28,7 +30,7 @@ export default { minimize: false, plugins: [] }), - (build !== 'local') ? terser() : false, + (build !== 'local' && build !== 'test') ? terser() : false, copy({ targets: [ 'assets/index.html', diff --git a/packages/person-select/test/unit.js b/packages/person-select/test/unit.js new file mode 100644 index 00000000..14f15338 --- /dev/null +++ b/packages/person-select/test/unit.js @@ -0,0 +1,19 @@ +import '../src/person-select'; + +describe('vpu-library-person-select basics', () => { + let node; + + beforeEach(async () => { + node = document.createElement('vpu-library-person-select'); + document.body.appendChild(node); + await node.updateComplete; + }); + + afterEach(() => { + node.remove(); + }); + + it('should render', () => { + expect(node).to.have.property('shadowRoot'); + }); +}); -- GitLab