Skip to content
This repository was archived by the owner on Sep 24, 2020. It is now read-only.

Commit f3fc091

Browse files
committedMar 17, 2017
Refactor tests and uplift libs
1 parent 9a6e402 commit f3fc091

17 files changed

+252
-204
lines changed
 

‎.gitignore

+3-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
1+
node_modules
2+
.idea
3+
.vscode

‎CHANGELOG.md

+14
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
# Change log
22

3+
## [v0.4.0] (2017-03-17)
4+
5+
** Features **
6+
7+
* Uplift to Vue 2.2
8+
* Refactor tests
9+
* Use es2015 style imports
10+
11+
** Fixes **
12+
13+
* Vue router is not a constructor [#6]
14+
* Typescript lint task not working
15+
316
## [v0.3.1] (2017-02-20)
417

518
** Features **
@@ -32,6 +45,7 @@
3245

3346
* Initial release
3447

48+
[v0.4.0]: https://github.com/ducksoupdev/vue-webpack-typescript/compare/v0.3.1...v0.4.0
3549
[v0.3.1]: https://github.com/ducksoupdev/vue-webpack-typescript/compare/v0.2.0...v0.3.1
3650
[v0.3.0]: https://github.com/ducksoupdev/vue-webpack-typescript/compare/v0.2.0...v0.3.0
3751
[v0.2.0]: https://github.com/ducksoupdev/vue-webpack-typescript/compare/v0.1.1...v0.2.0

‎README.md

+6-1
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,10 @@ $ npm run dev
1919
### What's Included
2020

2121
- `npm run dev`: Webpack + Typescript with proper config for source maps & hot-reload.
22-
- `npm test`: Jasmine-based tests and Karma coverage reporter
22+
- `npm test`: Jasmine-based tests
23+
- `npm run test-watch`: Jasmine-based tests with hot-reload
24+
- `npm run coverage`: Karma coverage reporter
25+
- `npm run lint`: Lint all Typescript files
2326
- `npm run build`: build with HTML/CSS/JS minification.
27+
- `npm run ci-teamcity`: Teamcity CI integration
28+
- `npm run ci-jenkins`: Jenkins CI integration

‎template/README.md

+12
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,24 @@ npm install
1111
# serve with hot reload at localhost:8080
1212
npm run dev
1313

14+
# lint the Typescript
15+
npm run lint
16+
1417
# run the tests
1518
npm test
1619

20+
# run the tests on changes
21+
npm run test-watch
22+
1723
# run the test suite and generate a coverage report
1824
npm run coverage
1925

26+
# run the tests on Teamcity
27+
npm run ci-teamcity
28+
29+
# run the tests on Jenkins
30+
npm run ci-jenkins
31+
2032
# build for production with minification
2133
npm run build
2234

‎template/karma.coverage.js

+14-10
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ var args = parseArgs(process.argv.slice(2), {
88
}
99
});
1010

11-
webpackConfig.module.rules = [
12-
{ test: /\.ts$/,
11+
webpackConfig.module.rules = [{
12+
test: /\.ts$/,
1313
exclude: /node_modules/,
1414
loader: "ts-loader",
1515
query: {
@@ -19,10 +19,10 @@ webpackConfig.module.rules = [
1919
}
2020
}
2121
},
22-
{
23-
test: /\.html$/,
24-
loader: 'raw-loader',
25-
exclude: [ './src/index.html' ]
22+
{
23+
test: /\.html$/,
24+
loader: 'raw-loader',
25+
exclude: ['./src/index.html']
2626
},
2727
{
2828
test: /\.ts$/,
@@ -31,12 +31,14 @@ webpackConfig.module.rules = [
3131
exclude: [
3232
'node_modules',
3333
/\.spec\.ts$/
34-
]
34+
],
35+
query: {
36+
esModules: true
37+
}
3538
}
3639
];
3740

3841
var reporters = ['mocha', 'coverage'];
39-
var browsers = ['PhantomJS'];
4042

4143
if (args.env === 'tc') {
4244
reporters = ['teamcity', 'coverage'];
@@ -63,7 +65,9 @@ module.exports = function (config) {
6365
resolve: webpackConfig.resolve,
6466
module: webpackConfig.module
6567
},
66-
webpackServer: {noInfo: true},
68+
webpackServer: {
69+
noInfo: true
70+
},
6771
junitReporter: {
6872
outputDir: 'reports/'
6973
},
@@ -78,7 +82,7 @@ module.exports = function (config) {
7882
colors: true,
7983
logLevel: config.LOG_INFO,
8084
autoWatch: false,
81-
browsers: browsers,
85+
browsers: ['PhantomJS'],
8286
singleRun: true
8387
});
8488
};

‎template/package.json

+57-48
Original file line numberDiff line numberDiff line change
@@ -7,67 +7,76 @@
77
"scripts": {
88
"build": "cross-env NODE_ENV=production npm run clean && npm run test && npm run sass && npm run build-parts && npm run clean-css && npm run process-html",
99
"build-parts": "npm run sass && npm run compile",
10+
"ci-teamcity": "karma --env=tc start karma.coverage.js && npm run ts-coverage-remap",
11+
"ci-jenkins": "karma --env=jk start karma.coverage.js && npm run ts-coverage-remap",
1012
"clean": "rimraf dist && rimraf coverage",
11-
"clean-css": "cleancss -o dist/css/main.min.css dist/css/main.css",
13+
"clean-css": "cleancss -o dist/css/main.min.css src/css/bootstrap.css src/css/main.css",
1214
"compile": "webpack",
13-
"coverage": "karma start karma.coverage.js && npm run ts-coverage-remap && npm run coverage-report-open",
14-
"coverage-report-open": "http-server coverage/html-ts/ -o -p 8888",
15+
"copy-bs": "ncp node_modules/bootstrap/dist/css/bootstrap.css src/css/bootstrap.css",
16+
"coverage": "npm run coverage-run && npm run ts-coverage-remap && npm run coverage-report-open",
17+
"coverage-run": "karma start karma.coverage.js",
18+
"coverage-report-open": "opn coverage/html-ts/index.html",
1519
"dev": "cross-env NODE_ENV=development npm run sass && concurrently --kill-others \"webpack-dev-server --hot --inline\" \"node-sass --watch --output ./src/css ./src/sass\"",
16-
"lint": "ts-node ./scripts/ts-lint.ts -f src/**/*.ts",
20+
"lint": "tslint src/**/*.ts",
1721
"process-html": "htmlprocessor src/index.html -o dist/index.html",
1822
"sass": "node-sass --output ./src/css ./src/sass",
1923
"serve": "http-server dist/ -o",
2024
"test": "karma start karma.unit.js",
25+
"test-watch": "karma start karma.unit.js --singleRun=false --auto-watch",
2126
"ts-coverage-remap": "remap-istanbul -i coverage/json/coverage-final.json -o coverage/html-ts -t html"
2227
},
2328
"dependencies": {
24-
"axios": "^0.15.3",
25-
"bootstrap": "^3.3.7",
26-
"vue": "^2.1.10",
27-
"vue-class-component": "^4.4.0",
28-
"vue-property-decorator": "^3.4.0",
29-
"vue-router": "^2.1.1"
29+
"axios": "~0.15.3",
30+
"bootstrap": "~3.3.7",
31+
"vue": "~2.2.4",
32+
"vue-class-component": "~5.0.0",
33+
"vue-property-decorator": "~4.0.0",
34+
"vue-router": "~2.3.0"
3035
},
3136
"devDependencies": {
32-
"@types/axios": "^0.9.34",
33-
"@types/jasmine": "^2.5.40",
34-
"@types/jquery": "^2.0.39",
35-
"@types/node": "^6.0.60",
36-
"clean-css-cli": "^4.0.7",
37-
"compression-webpack-plugin": "^0.3.2",
38-
"concurrently": "^3.3.0",
39-
"copy-webpack-plugin": "^4.0.1",
40-
"cross-env": "^3.1.4",
41-
"es6-promise": "^4.0.5",
42-
"file-loader": "^0.10.0",
37+
"@types/jasmine": "~2.5.46",
38+
"@types/jquery": "~2.0.41",
39+
"@types/node": "~7.0.8",
40+
"awesome-typescript-loader": "~3.1.2",
41+
"clean-css-cli": "~4.0.9",
42+
"compression-webpack-plugin": "~0.3.2",
43+
"concurrently": "~3.4.0",
44+
"copy-webpack-plugin": "~4.0.1",
45+
"cross-env": "~3.2.4",
46+
"es6-promise": "~4.1.0",
47+
"file-loader": "~0.10.1",
4348
"globby": "~6.1.0",
4449
"htmlprocessor": "~0.2.4",
45-
"http-server": "^0.9.0",
46-
"inject-loader": "^3.0.0-beta4",
47-
"istanbul-instrumenter-loader": "^2.0.0",
48-
"jasmine-core": "^2.5.2",
49-
"json-loader": "^0.5.4",
50-
"karma": "^1.4.1",
51-
"karma-coverage": "^1.1.1",
52-
"karma-jasmine": "^1.1.0",
53-
"karma-junit-reporter": "^1.2.0",
54-
"karma-mocha-reporter": "^2.2.2",
55-
"karma-phantomjs-launcher": "^1.0.2",
56-
"karma-source-map-support": "^1.2.0",
57-
"karma-teamcity-reporter": "^1.0.0",
58-
"karma-webpack": "^2.0.2",
59-
"lodash.merge": "^4.6.0",
60-
"minimist": "^1.2.0",
61-
"node-sass": "^4.1.1",
62-
"phantomjs-prebuilt": "^2.1.14",
63-
"raw-loader": "^0.5.1",
64-
"remap-istanbul": "^0.9.1",
65-
"rimraf": "^2.5.4",
66-
"ts-loader": "^2.0.0",
67-
"tslint": "^4.4.2",
68-
"tslint-loader": "^3.4.2",
69-
"typescript": "^2.1.6",
70-
"webpack": "^2.2.1",
71-
"webpack-dev-server": "^2.3.0"
50+
"http-server": "~0.9.0",
51+
"inject-loader": "~2.0.1",
52+
"istanbul-instrumenter-loader": "~2.0.0",
53+
"jasmine-core": "~2.5.2",
54+
"json-loader": "~0.5.4",
55+
"karma": "~1.5.0",
56+
"karma-chrome-launcher": "~2.0.0",
57+
"karma-coverage": "~1.1.1",
58+
"karma-jasmine": "~1.1.0",
59+
"karma-junit-reporter": "~1.2.0",
60+
"karma-mocha-reporter": "~2.2.2",
61+
"karma-phantomjs-launcher": "~1.0.4",
62+
"karma-source-map-support": "~1.2.0",
63+
"karma-sourcemap-loader": "~0.3.7",
64+
"karma-teamcity-reporter": "~1.0.0",
65+
"karma-webpack": "~2.0.3",
66+
"lodash.merge": "~4.6.0",
67+
"minimist": "~1.2.0",
68+
"ncp": "~2.0.0",
69+
"node-sass": "~4.5.0",
70+
"opn-cli": "~3.1.0",
71+
"phantomjs-prebuilt": "~2.1.14",
72+
"raw-loader": "~0.5.1",
73+
"remap-istanbul": "~0.9.1",
74+
"rimraf": "~2.6.1",
75+
"ts-loader": "~2.0.2",
76+
"tslint": "~4.5.1",
77+
"tslint-loader": "~3.4.3",
78+
"typescript": "~2.2.1",
79+
"webpack": "~2.2.1",
80+
"webpack-dev-server": "~2.4.2"
7281
}
7382
}
+30-42
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,34 @@
1-
import * as Vue from 'vue';
2-
import {ComponentTest} from '../../util/component-test';
3-
import {ILogger} from '../../util/log';
1+
import Vue from 'vue';
2+
import Component from 'vue-class-component';
3+
import { ComponentTest, MockLogger } from '../../util/component-test';
4+
import { ILogger } from '../../util/log';
5+
import { AboutComponent } from './about';
6+
7+
let loggerSpy = jasmine.createSpy('loggerInfo');
8+
9+
@Component({
10+
template: require('./about.html')
11+
})
12+
class MockAboutComponent extends AboutComponent {
13+
constructor() {
14+
super();
15+
this.logger = new MockLogger(loggerSpy);
16+
}
17+
}
418

519
describe('About component', () => {
6-
// ensure component is loaded into webpack
7-
// modules loaded using es6 imports (as above) that are not used are removed through transpilation
8-
let aboutComponent = require('./about');
9-
10-
let directiveTest: ComponentTest;
11-
let aboutComponentInjector: any;
12-
let infoLoggerSpy = jasmine.createSpy('loggerInfo');
13-
14-
class MockLogger implements ILogger {
15-
info(msg: any) {
16-
infoLoggerSpy(msg);
17-
}
18-
19-
warn(msg: any) {
20-
infoLoggerSpy(msg);
21-
}
22-
23-
error(msg: any) {
24-
infoLoggerSpy(msg);
25-
}
26-
}
27-
28-
beforeEach(() => {
29-
aboutComponentInjector = require('inject-loader!./about'); // load the module from the webpack bundle
30-
31-
let mockAboutComponent = aboutComponentInjector({
32-
'../../util/log': { Logger: MockLogger }
33-
}).AboutComponent;
34-
35-
directiveTest = new ComponentTest('<div><about></about></div>', { 'about': mockAboutComponent });
36-
});
37-
38-
it('should render correct contents', (done) => {
39-
directiveTest.createComponent();
40-
directiveTest.execute((vm) => {
41-
expect(vm.$el.querySelector('.repo-link').getAttribute('href')).toBe('https://github.com/ducksoupdev/vue-webpack-typescript');
42-
expect(infoLoggerSpy).toHaveBeenCalledWith('about is ready!');
43-
done();
44-
});
20+
let directiveTest: ComponentTest;
21+
22+
beforeEach(() => {
23+
directiveTest = new ComponentTest('<div><about></about></div>', { 'about': MockAboutComponent });
24+
});
25+
26+
it('should render correct contents', (done) => {
27+
directiveTest.createComponent();
28+
directiveTest.execute((vm) => {
29+
expect(vm.$el.querySelector('.repo-link').getAttribute('href')).toBe('https://github.com/ducksoupdev/vue-webpack-typescript');
30+
expect(loggerSpy).toHaveBeenCalledWith('about is ready!');
31+
done();
4532
});
33+
});
4634
});

‎template/src/components/about/about.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as Vue from 'vue';
1+
import Vue from 'vue';
22
import Component from 'vue-class-component';
33
import {Logger} from '../../util/log';
44

@@ -7,7 +7,7 @@ import {Logger} from '../../util/log';
77
})
88
export class AboutComponent extends Vue {
99

10-
private logger: Logger;
10+
protected logger: Logger;
1111
repo: string = 'https://github.com/ducksoupdev/vue-webpack-typescript';
1212

1313
mounted() {

‎template/src/components/home/home.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as Vue from 'vue';
1+
import Vue from 'vue';
22
import Component from 'vue-class-component';
33

44
@Component({
+31-30
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,36 @@
1-
import * as Vue from 'vue';
2-
import {ComponentTest} from '../../util/component-test';
1+
import Vue from 'vue';
2+
import Component from 'vue-class-component';
3+
import { ComponentTest } from '../../util/component-test';
4+
import { ListComponent } from './list';
35

4-
describe('List component', () => {
5-
// ensure component is loaded into webpack
6-
// modules loaded using es6 imports (as above) that are not used are removed through transpilation
7-
let listComponent = require('./list');
8-
9-
let directiveTest: ComponentTest;
10-
let listComponentInjector: any;
6+
@Component({
7+
template: require('./list.html')
8+
})
9+
class MockListComponent extends ListComponent {
10+
constructor() {
11+
super();
12+
this.axios = {
13+
get: () => {
14+
return Promise.resolve({ data: [{ name: 'test 1' }, { name: 'test 2' }, { name: 'test 3' }] });
15+
}
16+
};
17+
}
18+
}
1119

12-
beforeEach(() => {
13-
listComponentInjector = require('inject-loader!./list'); // load the module from the webpack bundle
14-
15-
let mockListComponent = listComponentInjector({
16-
axios: {
17-
get: () => {
18-
return Promise.resolve({ data: [{ name: 'test 1' }, { name: 'test 2' }, { name: 'test 3' }] });
19-
}
20-
}
21-
}).ListComponent;
20+
describe('List component', () => {
21+
let directiveTest: ComponentTest;
2222

23-
directiveTest = new ComponentTest('<div><list></list></div>', { 'list': mockListComponent });
24-
});
23+
beforeEach(() => {
24+
directiveTest = new ComponentTest('<div><list></list></div>', { 'list': MockListComponent });
25+
});
2526

26-
it('should render correct contents', (done) => {
27-
directiveTest.createComponent();
28-
setTimeout(() => {
29-
directiveTest.execute((vm) => { // ensure Vue has bootstrapped/run change detection
30-
expect(vm.$el.querySelectorAll('ul li').length).toBe(3);
31-
done();
32-
});
33-
}, 50);
34-
});
27+
it('should render correct contents', (done) => {
28+
directiveTest.createComponent();
29+
setTimeout(() => {
30+
directiveTest.execute((vm) => { // ensure Vue has bootstrapped/run change detection
31+
expect(vm.$el.querySelectorAll('ul li').length).toBe(3);
32+
done();
33+
});
34+
}, 50);
35+
});
3536
});

‎template/src/components/list/list.ts

+9-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import * as Vue from 'vue';
1+
import Vue from 'vue';
22
import Component from 'vue-class-component';
3-
import * as axios from 'axios';
3+
import axios, {AxiosResponse} from 'axios';
44

55
interface UserResponse {
66
id: string;
@@ -14,6 +14,12 @@ export class ListComponent extends Vue {
1414

1515
items: UserResponse[] = [];
1616
private url = 'https://jsonplaceholder.typicode.com/users';
17+
protected axios;
18+
19+
constructor() {
20+
super();
21+
this.axios = axios;
22+
}
1723

1824
mounted() {
1925
this.$nextTick(() => {
@@ -23,7 +29,7 @@ export class ListComponent extends Vue {
2329

2430
private loadItems() {
2531
if (!this.items.length) {
26-
axios.get(this.url).then((response: Axios.AxiosXHR<UserResponse[]>) => {
32+
this.axios.get(this.url).then((response: AxiosResponse) => {
2733
this.items = response.data;
2834
}, (error) => {
2935
console.error(error);

‎template/src/components/navbar/navbar.spec.ts

+18-31
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,29 @@
1-
import * as Vue from 'vue';
1+
import Vue from 'vue';
22
import VueRouter from 'vue-router';
3-
import {ComponentTest} from '../../util/component-test';
3+
import Component from 'vue-class-component';
4+
import {ComponentTest, MockLogger} from '../../util/component-test';
45
import {ILogger} from '../../util/log';
6+
import { NavbarComponent } from './navbar';
57

6-
describe('Navbar component', () => {
7-
// ensure component is loaded into webpack
8-
// modules loaded using es6 imports (as above) that are not used are removed through transpilation
9-
let navbarComponent = require('./navbar');
8+
let loggerSpy = jasmine.createSpy('loggerInfo');
9+
10+
@Component({
11+
template: require('./navbar.html')
12+
})
13+
class MockNavbarComponent extends NavbarComponent {
14+
constructor() {
15+
super();
16+
this.logger = new MockLogger(loggerSpy);
17+
}
18+
}
1019

20+
describe('Navbar component', () => {
1121
let directiveTest: ComponentTest;
12-
let navbarComponentInjector: any;
1322
let router: VueRouter;
14-
let infoLoggerSpy = jasmine.createSpy('loggerInfo');
15-
16-
class MockLogger implements ILogger {
17-
info(msg: any) {
18-
infoLoggerSpy(msg);
19-
}
20-
21-
warn(msg: any) {
22-
infoLoggerSpy(msg);
23-
}
24-
25-
error(msg: any) {
26-
infoLoggerSpy(msg);
27-
}
28-
}
2923

3024
beforeAll(() => {
3125
Vue.use(VueRouter);
32-
33-
navbarComponentInjector = require('inject-loader!./navbar'); // load the module from the webpack bundle
34-
35-
let mockNavbarComponent = navbarComponentInjector({
36-
'../../util/log': { Logger: MockLogger }
37-
}).NavbarComponent;
38-
39-
directiveTest = new ComponentTest('<div><navbar></navbar><router-view>loading...</router-view></div>', { 'navbar': mockNavbarComponent });
26+
directiveTest = new ComponentTest('<div><navbar></navbar><router-view>loading...</router-view></div>', { 'navbar': MockNavbarComponent });
4027

4128
let homeComponent = { template: '<div class="home">Home</div>' };
4229
let aboutComponent = { template: '<div class="about">About</div>' };
@@ -55,7 +42,7 @@ describe('Navbar component', () => {
5542
directiveTest.createComponent({ router: router });
5643

5744
directiveTest.execute((vm) => { // ensure Vue has bootstrapped/run change detection
58-
expect(infoLoggerSpy).toHaveBeenCalledWith('Default object property!');
45+
expect(loggerSpy).toHaveBeenCalledWith('Default object property!');
5946
expect(vm.$el.querySelectorAll('ul.nav li').length).toBe(3);
6047
done();
6148
});

‎template/src/components/navbar/navbar.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as Vue from 'vue';
1+
import Vue from 'vue';
22
import { Component, watch } from 'vue-property-decorator';
33
import { Link } from './link';
44
import { Logger } from '../../util/log';
@@ -8,7 +8,7 @@ import { Logger } from '../../util/log';
88
})
99
export class NavbarComponent extends Vue {
1010

11-
private logger: Logger;
11+
protected logger: Logger;
1212

1313
inverted: boolean = true; // default value
1414

‎template/src/index.html

+5-3
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55
<meta http-equiv="x-ua-compatible" content="ie=edge">
66
<meta name="viewport" content="width=device-width, initial-scale=1">
77

8-
<title>{{ name }}</title>
8+
<title>vue-upgrade4</title>
99

10-
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
10+
<!-- build:remove -->
11+
<link rel="stylesheet" href="css/bootstrap.css">
12+
<!-- /build -->
1113
<!-- build:css css/main.min.css -->
12-
<link rel="stylesheet" href="/css/main.css">
14+
<link rel="stylesheet" href="css/main.css">
1315
<!-- /build -->
1416
</head>
1517

‎template/src/util/component-test.ts

+39-20
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,56 @@
1-
import * as Vue from 'vue';
2-
import * as merge from 'lodash.merge';
1+
import Vue from 'vue';
2+
import merge from 'lodash.merge';
3+
import { ILogger } from './log';
34

45
export interface IComponents {
5-
[key: string]: Vue.Component;
6+
[key: string]: Vue.Component;
67
}
78

89
interface IExecuteCallback {
9-
(vm: Vue): void;
10+
(vm: Vue): void;
1011
}
1112

1213
export interface IComponentTest {
13-
createComponent(createOptions?: any): void;
14-
execute(callback: IExecuteCallback): void;
14+
createComponent(createOptions?: any): void;
15+
execute(callback: IExecuteCallback): void;
1516
}
1617

1718
export class ComponentTest implements IComponentTest {
1819

19-
public vm: Vue;
20+
public vm: Vue;
2021

21-
constructor(private template: string, private components: IComponents) {
22-
}
22+
constructor(private template: string, private components: IComponents) {
23+
}
2324

24-
public createComponent(createOptions?: any): void {
25-
let options = {
26-
template: this.template,
27-
components: this.components
28-
};
29-
if (createOptions) merge(options, createOptions);
30-
this.vm = new Vue(options).$mount();
31-
}
25+
public createComponent(createOptions?: any): void {
26+
let options = {
27+
template: this.template,
28+
components: this.components
29+
};
30+
if (createOptions) merge(options, createOptions);
31+
this.vm = new Vue(options).$mount();
32+
}
3233

33-
public execute(callback: IExecuteCallback): void {
34-
Vue.nextTick(callback.bind(this, this.vm));
35-
}
34+
public execute(callback: IExecuteCallback): void {
35+
Vue.nextTick(callback.bind(this, this.vm));
36+
}
3637

3738
}
39+
40+
export class MockLogger implements ILogger {
41+
42+
constructor(private loggerSpy: jasmine.Spy) {
43+
}
44+
45+
info(msg: any) {
46+
this.loggerSpy(msg);
47+
}
48+
49+
warn(msg: any) {
50+
this.loggerSpy(msg);
51+
}
52+
53+
error(msg: any) {
54+
this.loggerSpy(msg);
55+
}
56+
}

‎template/tsconfig.json

+5-7
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
11
{
22
"compilerOptions": {
3-
"lib":[
4-
"dom",
3+
"lib": [
4+
"dom",
55
"es5",
6+
"es2015",
67
"es2015.promise"
78
],
8-
"module": "commonjs",
9+
"module": "es2015",
910
"moduleResolution": "node",
1011
"target": "es5",
1112
"sourceMap": true,
1213
"emitDecoratorMetadata": true,
1314
"experimentalDecorators": true,
1415
"allowSyntheticDefaultImports": true
15-
},
16-
"exclude": [
17-
"node_modules"
18-
]
16+
}
1917
}

‎template/webpack.config.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ var metadata = {
1414
};
1515

1616
module.exports = {
17+
stats: false,
1718
devtool: 'source-map', //to point console errors to ts files instead of compiled js
1819
entry: {
1920
'main': './src/main.ts', //app main file
@@ -24,15 +25,15 @@ module.exports = {
2425
filename: '[name].js'
2526
},
2627
resolve: {
27-
extensions: ['.ts', '.js'],
28+
extensions: ['.ts', '.js', '.html'],
2829
alias: {
2930
'vue$': 'vue/dist/vue.common.js'
3031
}
3132
},
3233
module: {
3334
rules: [
34-
{ test: /\.ts$/, enforce: 'pre', loader: 'tslint-loader' },
35-
{ test: /\.ts$/, exclude: /node_modules/, loader: "ts-loader" },
35+
{ test: /\.ts$/, exclude: /node_modules/, enforce: 'pre', loader: 'tslint-loader' },
36+
{ test: /\.ts$/, loader: 'ts-loader' },
3637
{ test: /\.html$/, loader: 'raw-loader', exclude: [ './src/index.html' ] }
3738
]
3839
},

0 commit comments

Comments
 (0)
This repository has been archived.