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

Commit f3fc091

Browse files
committed
Refactor tests and uplift libs
1 parent 9a6e402 commit f3fc091

File tree

17 files changed

+252
-204
lines changed

17 files changed

+252
-204
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
1+
node_modules
2+
.idea
3+
.vscode

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
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

Lines changed: 6 additions & 1 deletion
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

Lines changed: 12 additions & 0 deletions
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

Lines changed: 14 additions & 10 deletions
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

Lines changed: 57 additions & 48 deletions
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
}
Lines changed: 30 additions & 42 deletions
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

Lines changed: 2 additions & 2 deletions
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

Lines changed: 1 addition & 1 deletion
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({

0 commit comments

Comments
 (0)