enabled karma tests to load the tagit-module before tests.

This commit is contained in:
Nils Norman Haukås 2017-06-06 21:32:50 +02:00
parent 905a0761a4
commit 0605cd03f1
8 changed files with 43 additions and 14 deletions

View file

@ -15,10 +15,13 @@ Prerequisites:
1. Run `npm install` 1. Run `npm install`
1. Run `npm start` to serve up the prototype for live development. To configure what browser is started please see the `npm start` command found in the package.json file. 1. Run `npm start` to serve up the prototype for live development. To configure what browser is started please see the `npm start` command found in the package.json file.
`npm test` will run unit tests.
Please note: A [workaround for CORS](https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?utm_source=chrome-app-launcher-info-dialog) is needed for allowing the live development version to talk to the server. Please note: A [workaround for CORS](https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?utm_source=chrome-app-launcher-info-dialog) is needed for allowing the live development version to talk to the server.
## Testing
1. Run `npm run webpack:watch` in one terminal window to activate running code compilation.
2. Run `npm run test` in another terminal window to start Karma tests.
## Deployment ## Deployment
Steps to deploy an update to the Chrome extension. Steps to deploy an update to the Chrome extension.

View file

@ -15,6 +15,8 @@ module.exports = function(config) {
// list of files / patterns to load in the browser // list of files / patterns to load in the browser
files: [ files: [
'karma.pre-test.js',
'dist/app.js',
'src/**/*.spec.ts' 'src/**/*.spec.ts'
], ],
@ -30,6 +32,12 @@ module.exports = function(config) {
"**/*.ts": ["karma-typescript"], "**/*.ts": ["karma-typescript"],
}, },
karmaTypescriptConfig: {
bundlerOptions: {
transforms: [require("karma-typescript-es6-transform")()]
},
tsconfig: "./tsconfig.json"
},
// test results reporter to use // test results reporter to use
// possible values: 'dots', 'progress' // possible values: 'dots', 'progress'

3
karma.pre-test.js Normal file
View file

@ -0,0 +1,3 @@
// put a dev flag in before code
// and test code starts running
window.karmaTestMode = true

View file

@ -10,6 +10,7 @@
"start": "browser-sync start --no-notify -b chromium --startPath test/ --server --files 'src/**/*'", "start": "browser-sync start --no-notify -b chromium --startPath test/ --server --files 'src/**/*'",
"package": "rm dist.zip || true && zip -r dist.zip dist", "package": "rm dist.zip || true && zip -r dist.zip dist",
"webpack": "webpack", "webpack": "webpack",
"webpack:watch": "webpack --watch",
"karma": "karma" "karma": "karma"
}, },
"repository": { "repository": {
@ -53,7 +54,11 @@
"jasmine-core": "^2.6.2", "jasmine-core": "^2.6.2",
"karma": "^1.7.0", "karma": "^1.7.0",
"karma-chrome-launcher": "^2.1.1", "karma-chrome-launcher": "^2.1.1",
"karma-es6-shim": "^1.0.0",
"karma-jasmine": "^1.1.0", "karma-jasmine": "^1.1.0",
"karma-typescript": "^3.0.3" "karma-requirejs": "^1.1.0",
"karma-typescript": "^3.0.3",
"karma-typescript-es6-transform": "^1.0.1",
"requirejs": "^2.3.3"
} }
} }

View file

@ -4,6 +4,7 @@ export {};
declare global { declare global {
interface Window { interface Window {
tagitTestMode: boolean; tagitTestMode: boolean;
karmaTestMode: boolean;
} }
interface RangyStatic { interface RangyStatic {

View file

@ -17,21 +17,24 @@ import 'ngstorage';
console.log('Finished importing'); console.log('Finished importing');
if (!window.tagitTestMode) { if (window.tagitTestMode) {
preparePage(function () {
loadAngular()
chrome.runtime.sendMessage({command: 'injectCSS'})
});
}
else {
/** /**
* Cannot load too fast when served locally. The iframes won't be fully * Cannot load too fast when served locally. The iframes won't be fully
* loaded when Angular tries to bootstrap itself. * loaded when Angular tries to bootstrap itself.
*/ */
setTimeout((loadAngular), 1000) setTimeout((loadAngular), 1000)
} }
else if (window.karmaTestMode) {
loadAngular(false)
}
else {
preparePage(function () {
loadAngular()
chrome.runtime.sendMessage({command: 'injectCSS'})
});
}
function loadAngular() { function loadAngular(bootstrap?: boolean) {
console.log('Start loading angular') console.log('Start loading angular')
angular.module('tagit', ['ngStorage']) angular.module('tagit', ['ngStorage'])
.service('SettingsService', SettingsService) .service('SettingsService', SettingsService)
@ -42,12 +45,16 @@ function loadAngular() {
.controller('SettingsCtrl', SettingsCtrl) .controller('SettingsCtrl', SettingsCtrl)
.controller('MenuCtrl', MenuCtrl) .controller('MenuCtrl', MenuCtrl)
angular.bootstrap( if (bootstrap) {
angular.bootstrap(
(<HTMLIFrameElement>document.getElementById("tagit-iframe")) (<HTMLIFrameElement>document.getElementById("tagit-iframe"))
.contentDocument.getElementById('tagit-menu'), .contentDocument.getElementById('tagit-menu'),
['tagit']); ['tagit']);
setupChromeListener() setupChromeListener()
} else {
console.log('skipped bootstrapping')
}
console.log('TagIt menu loaded'); console.log('TagIt menu loaded');
} }

View file

@ -3,6 +3,7 @@
"target": "es5", "target": "es5",
"noImplicitAny": false, "noImplicitAny": false,
"module": "commonjs", "module": "commonjs",
"outDir": "tmp-js-build/" "outDir": "tmp-js-build/",
"inlineSourceMap": true
} }
} }

View file

@ -6,6 +6,7 @@ module.exports = {
filename: 'app.js', filename: 'app.js',
path: path.resolve(__dirname, 'dist') path: path.resolve(__dirname, 'dist')
}, },
devtool: 'inline-source-map',
module: { module: {
rules: [ rules: [
{ {