Skip to content

Commit 45d619f

Browse files
author
Georgii Rychko
authored
Merge pull request #47 from valor-software/chore-coverage
Chore coverage
2 parents 3ec4490 + b3223e1 commit 45d619f

7 files changed

Lines changed: 301 additions & 97 deletions

File tree

karma.conf.js

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,34 @@
11
'use strict';
22

33
module.exports = config => {
4-
config.set({
5-
autoWatch: true,
6-
browsers: ['PhantomJS'],
7-
files: [
8-
{pattern: 'test.bundle.js', watched: false}
9-
],
10-
frameworks: ['jasmine'],
11-
logLevel: config.LOG_INFO,
12-
phantomJsLauncher: {
13-
exitOnResourceError: true
14-
},
15-
port: 9876,
16-
preprocessors: {
17-
'test.bundle.js': ['webpack', 'sourcemap']
18-
},
19-
reporters: ['spec'],
20-
singleRun: true,
21-
webpack: require('./webpack.test.js'),
22-
webpackServer: {
23-
noInfo: true
24-
}
25-
});
4+
config.set({
5+
autoWatch: true,
6+
browsers: ['PhantomJS'],
7+
files: [
8+
{ pattern: 'test.bundle.js', watched: false }
9+
],
10+
frameworks: ['jasmine'],
11+
logLevel: config.LOG_INFO,
12+
phantomJsLauncher: {
13+
exitOnResourceError: true
14+
},
15+
port: 9876,
16+
preprocessors: {
17+
'test.bundle.js': ['webpack', 'sourcemap']
18+
},
19+
reporters: process.env.COVERAGE === 'enabled' ? ['spec', 'karma-remap-istanbul'] : ['spec'],
20+
remapIstanbulReporter: {
21+
reports: {
22+
html: 'coverage'
23+
}
24+
},
25+
coverageReporter: {
26+
includeAllSources: true
27+
},
28+
singleRun: true,
29+
webpack: require('./webpack.test.js'),
30+
webpackServer: {
31+
noInfo: true
32+
}
33+
});
2634
};

package.json

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
"flow.compile": "npm run flow.compile:common && npm run flow.compile:system",
3535
"flow.compile:common": "ngc -p tsconfig-aot.json",
3636
"flow.compile:system": "node umd-bundler.js",
37-
"flow.clean": "rimraf build demo-dist dist bundles factories",
37+
"flow.clean": "rimraf coverage build demo-dist dist bundles factories",
3838
"flow.deploy:gh-pages": "npm run flow.build && gulp deploy",
3939
"flow.tslint": "tslint \"**/*.ts\" -c tslint.json --type-check -t prose -e \"node_modules/**\" -e \"test/**\" -e \"factories/**\" -e \"dist/**\" -e \"demo/**\" -e \"demo-dist/**\"",
4040
"flow.lint": "npm run flow.tslint",
@@ -43,7 +43,8 @@
4343
"pre:publish": "npm run flow.clean && npm run flow.lint && npm run test && npm run flow.compile && mkdir -p dist && cp src/styles.css dist && cp README.md dist && cp --parents media/* dist",
4444
"post:publish": "npm run flow.deploy:gh-pages",
4545
"start": "npm run flow.serve",
46-
"test": "karma start karma.conf.js"
46+
"test": "npm run flow.clean && karma start karma.conf.js",
47+
"test:cover": "COVERAGE=enabled npm run test"
4748
},
4849
"devDependencies": {
4950
"@angular/common": "2.4.5",
@@ -63,14 +64,15 @@
6364
"codelyzer": "~2.0.0-beta.4",
6465
"core-js": "2.4.1",
6566
"css-loader": "0.26.1",
66-
"del": "2.2.2",
6767
"gulp": "3.9.1",
6868
"gulp-gh-pages": "0.5.4",
69+
"istanbul-instrumenter-loader": "2.0.0",
6970
"jasmine-core": "2.5.2",
7071
"karma": "1.4.0",
71-
"karma-chrome-launcher": "2.0.0",
72+
"karma-coverage-istanbul-reporter": "0.2.0",
7273
"karma-jasmine": "1.1.0",
7374
"karma-phantomjs-launcher": "github:karma-runner/karma-phantomjs-launcher",
75+
"karma-remap-istanbul": "0.6.0",
7476
"karma-sourcemap-loader": "0.3.7",
7577
"karma-spec-reporter": "0.0.26",
7678
"karma-webpack": "1.8.1",

src/tree-internal.component.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,18 @@ import { NodeDraggableEvent } from './draggable/draggable.events';
1414
<ul class="tree" *ngIf="tree" [ngClass]="{rootless: isRootHidden()}">
1515
<li>
1616
<div class="value-container"
17-
[ngClass]="{rootless: isRootHidden()}"
18-
(contextmenu)="showMenu($event)"
17+
[ngClass]="{rootless: isRootHidden()}"
18+
(contextmenu)="showMenu($event)"
1919
[nodeDraggable]="element"
2020
[tree]="tree">
2121
2222
<div class="folding" (click)="tree.switchFoldingType()" [ngClass]="tree.foldingType.cssClass"></div>
23-
<div class="node-value"
24-
*ngIf="!shouldShowInputForTreeValue()"
25-
[class.node-selected]="isSelected"
23+
<div class="node-value"
24+
*ngIf="!shouldShowInputForTreeValue()"
25+
[class.node-selected]="isSelected"
2626
(click)="onNodeSelected($event)">{{tree.value}}</div>
2727
28-
<input type="text" class="node-value"
28+
<input type="text" class="node-value"
2929
*ngIf="shouldShowInputForTreeValue()"
3030
[nodeEditable]="tree.value"
3131
(valueChanged)="applyNewValue($event)"/>

test/tree.components.spec.ts

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import { TestBed, ComponentFixture } from '@angular/core/testing';
2+
import { By } from '@angular/platform-browser';
3+
import { Component, DebugElement } from '@angular/core';
4+
import { TreeInternalComponent } from '../src/tree-internal.component';
5+
import { TreeComponent } from '../src/tree.component';
6+
import { TreeModel } from '../src/tree.types';
7+
import { TreeService } from '../src/tree.service';
8+
import { NodeMenuService } from '../src/menu/node-menu.service';
9+
import { NodeMenuComponent } from '../src/menu/node-menu.component';
10+
import { NodeDraggableService } from '../src/draggable/node-draggable.service';
11+
import { NodeDraggableDirective } from '../src/draggable/node-draggable.directive';
12+
import { NodeEditableDirective } from '../src/editable/node-editable.directive';
13+
14+
let fixture: ComponentFixture<TestComponent>;
15+
let componentInstance: TreeComponent;
16+
let componentEl: DebugElement;
17+
18+
describe('TreeComponent (the one that wraps TreeInternalComponent)', () => {
19+
beforeEach(() => {
20+
TestBed.configureTestingModule({
21+
declarations: [TestComponent, TreeInternalComponent, TreeComponent, NodeEditableDirective, NodeMenuComponent, NodeDraggableDirective],
22+
providers: [NodeMenuService, NodeDraggableService, TreeService]
23+
});
24+
25+
fixture = TestBed.createComponent(TestComponent);
26+
componentEl = fixture.debugElement.query(By.directive(TreeComponent));
27+
componentInstance = componentEl.componentInstance;
28+
29+
fixture.detectChanges();
30+
});
31+
32+
it('should be initialized', () => {
33+
expect(fixture).not.toBeNull();
34+
expect(componentInstance.tree).not.toBeFalsy();
35+
});
36+
37+
it('should have default empty tree if none was given via input', () => {
38+
expect(componentInstance.tree.value).toEqual('');
39+
expect(componentInstance.tree.isRoot()).toEqual(true);
40+
expect(componentInstance.treeModel).toBeFalsy();
41+
expect(componentInstance.tree.children).toBeFalsy();
42+
});
43+
44+
it('should use given model if it is not falsy', () => {
45+
fixture.debugElement.componentInstance.model = {
46+
value: '42'
47+
};
48+
49+
fixture.detectChanges();
50+
51+
expect(componentInstance.tree.value).toEqual('42');
52+
expect(componentInstance.treeModel.value).toEqual('42');
53+
});
54+
});
55+
56+
@Component({
57+
template: `
58+
<div><tree [tree]="model"></tree></div>
59+
`
60+
})
61+
class TestComponent {
62+
public model: TreeModel;
63+
}

tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"moduleResolution": "node",
66
"emitDecoratorMetadata": true,
77
"experimentalDecorators": true,
8-
"sourceMap": false,
8+
"sourceMap": true,
99
"noImplicitAny": false,
1010
"removeComments": true,
1111
"declaration": false,

webpack.test.js

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,30 @@
11
'use strict';
22

33
const path = require('path');
4+
const SRC = path.resolve('src');
45

56
module.exports = {
6-
devtool: 'inline-source-map',
7-
module: {
8-
loaders: [
9-
{ loader: 'raw', test: /\.(css|html)$/ },
10-
{ exclude: /node_modules/, loader: 'ts', test: /\.ts$/ }
7+
// devtool: 'inline-source-map',
8+
module: {
9+
postLoaders: [
10+
{
11+
test: /\.(ts)$/,
12+
loader: 'istanbul-instrumenter-loader',
13+
include: SRC,
14+
exclude: [
15+
/\.(e2e|spec)\.ts$/,
16+
/node_modules/
1117
]
12-
},
13-
resolve: {
14-
extensions: ['', '.js', '.ts'],
15-
modulesDirectories: ['node_modules'],
16-
root: path.resolve('.', 'src')
17-
}
18+
}
19+
],
20+
loaders: [
21+
{ loader: 'raw', test: /\.(css|html)$/ },
22+
{ exclude: /node_modules/, loader: 'ts', test: /\.ts$/ }
23+
]
24+
},
25+
resolve: {
26+
extensions: ['', '.js', '.ts'],
27+
modulesDirectories: ['node_modules'],
28+
root: SRC
29+
}
1830
};

0 commit comments

Comments
 (0)