Commit 78b1f609dca7acb2a61bb332f78ddc972cf25aa3
1 parent
e83eb73f
Exists in
master
and in
1 other branch
changes to make coverage work
Showing
13 changed files
with
156 additions
and
48 deletions
Show diff stats
dev-scripts/remapCoverage.ts
... | ... | @@ -46,21 +46,60 @@ fs.readdir(coveragePath, (err, directories) => { |
46 | 46 | |
47 | 47 | let absoluteProjectPath = path.join(__dirname, "../"); |
48 | 48 | |
49 | - replace({ | |
50 | - regex: absoluteProjectPath, | |
51 | - replacement: "", | |
52 | - paths: [coverageFile], | |
53 | - sillent: true | |
54 | - }); | |
49 | + // replace({ | |
50 | + // regex: absoluteProjectPath, | |
51 | + // replacement: "", | |
52 | + // paths: [coverageFile], | |
53 | + // sillent: true | |
54 | + // }); | |
55 | 55 | // para cada pasta executa o remap do coverage que está apontando para os arquivos js |
56 | 56 | // para apontar para os arquivos Typecript |
57 | 57 | // gerando dois reports: JSON e HTML |
58 | - remapIstanbul(coverageFile, | |
59 | - { | |
60 | - "basePath": "./src/", | |
61 | - "json": path.join(coverageFolder, "coverage-final-remaped.json"), | |
62 | - "html": path.join(coverageFolder) | |
63 | - }); | |
58 | + // remapIstanbul(coverageFile, | |
59 | + // { | |
60 | + // "exclude": | |
61 | + // "json": path.join(coverageFolder, "coverage-final-remaped.json") | |
62 | + // }); | |
63 | + | |
64 | + // replace({ | |
65 | + // regex: "src/webpack:/", | |
66 | + // replacement: "", | |
67 | + // paths: [coverageFile], | |
68 | + // sillent: true | |
69 | + // }); | |
70 | + | |
71 | + var loadCoverage = require('remap-istanbul/lib/loadCoverage'); | |
72 | + var remap = require('remap-istanbul/lib/remap'); | |
73 | + var writeReport = require('remap-istanbul/lib/writeReport'); | |
74 | + | |
75 | + var collector = remap(loadCoverage(coverageFile), { | |
76 | + exclude: 'Reflect', | |
77 | + /*readFile: function(filePath): any { | |
78 | + var pathNormalized = filePath.replace("webpack:///./src/", ""); | |
79 | + pathNormalized = pathNormalized.replace(/\.ts\?(\w+)"/, ".ts\""); | |
80 | + console.log("FILE PATH: ", pathNormalized); | |
81 | + if (!fs.existsSync(pathNormalized)) { | |
82 | + console.warn(new Error('Could not find file: "' + pathNormalized + '"')); | |
83 | + return ''; | |
84 | + } | |
85 | + return fs.readFileSync(pathNormalized); | |
86 | + }*/ | |
87 | + }); | |
88 | + | |
89 | + var Store = require("istanbul").Store; | |
90 | + var store = Store.create("fslookup"); | |
91 | + store.get = function (key) { | |
92 | + var pathNormalized = key.replace("src/webpack:/", ""); | |
93 | + console.error("PATH >>> ", pathNormalized); | |
94 | + pathNormalized = pathNormalized.replace(/\.ts\?(\w+)/, ".ts"); | |
95 | + console.log("my store got called!", key, pathNormalized); | |
96 | + return fs.readFileSync(pathNormalized, 'utf8'); | |
97 | + } | |
98 | + writeReport(collector, 'html', coverageFolder, store); | |
99 | + writeReport(collector, 'json', path.join(coverageFolder, 'coverage-final-remaped.json'), store).then(function() { | |
100 | + | |
101 | + /* do something else now */ | |
102 | + }); | |
64 | 103 | }); |
65 | 104 | |
66 | 105 | }); |
67 | 106 | \ No newline at end of file | ... | ... |
karma.conf.js
... | ... | @@ -7,8 +7,8 @@ var conf = require('./gulp/conf'); |
7 | 7 | var argv = require("yargs").argv; |
8 | 8 | |
9 | 9 | var singleRun = (argv.singleRun !== undefined && argv.singleRun); |
10 | -var coverage = (argv.coverage === undefined || argv.coverage); | |
11 | - | |
10 | +var coverage = (argv.coverage === undefined || argv.coverage); | |
11 | + | |
12 | 12 | |
13 | 13 | if (argv.singleRun) { |
14 | 14 | singleRun = true; |
... | ... | @@ -16,6 +16,7 @@ if (argv.singleRun) { |
16 | 16 | |
17 | 17 | var projectFiles = [ |
18 | 18 | './src/commons.js', |
19 | + './src/vendor.bundle.js', | |
19 | 20 | './src/noosfero.js', |
20 | 21 | './src/noosfero-specs.js' |
21 | 22 | ]; |
... | ... | @@ -28,18 +29,19 @@ var karmaPlugins = [ |
28 | 29 | 'karma-jasmine', |
29 | 30 | 'karma-spec-reporter', |
30 | 31 | 'karma-ng-html2js-preprocessor', |
31 | - 'karma-sourcemap-loader' | |
32 | + 'karma-sourcemap-loader', | |
33 | + 'karma-coverage' | |
32 | 34 | ]; |
33 | 35 | |
34 | 36 | |
35 | -var karmaReporters = ['spec']; | |
37 | +var karmaReporters = ['spec', 'coverage']; | |
36 | 38 | |
37 | 39 | |
38 | 40 | |
39 | -if (coverage) { | |
40 | - karmaPlugins.push('karma-coverage'); | |
41 | - karmaReporters.push('coverage'); | |
42 | -} | |
41 | +// if (coverage) { | |
42 | +// karmaPlugins.push('karma-coverage'); | |
43 | +// karmaReporters.push('coverage'); | |
44 | +// } | |
43 | 45 | |
44 | 46 | |
45 | 47 | |
... | ... | @@ -88,7 +90,7 @@ module.exports = function (config) { |
88 | 90 | |
89 | 91 | var configuration = { |
90 | 92 | basePath: '../angular-theme', |
91 | - | |
93 | + | |
92 | 94 | files: listFiles(), |
93 | 95 | |
94 | 96 | singleRun: singleRun, |
... | ... | @@ -155,13 +157,15 @@ module.exports = function (config) { |
155 | 157 | // It was not possible to do it there because karma doesn't let us now if we are |
156 | 158 | // running a single test or not |
157 | 159 | configuration.preprocessors = { |
158 | - 'src/noosfero.js': ['sourcemap', 'coverage'] | |
160 | + 'src/noosfero.js': ['sourcemap', 'coverage'], | |
161 | + 'src/**/*.ts': ['sourcemap'] | |
162 | + | |
159 | 163 | }; |
160 | 164 | |
161 | 165 | configuration.coverageReporter = { |
162 | 166 | dir: 'coverage/', |
163 | 167 | reporters: [ |
164 | - /*{ type: 'html' },*/ | |
168 | + { type: 'html' }, | |
165 | 169 | { type: 'json', file: 'coverage-final.json' }, |
166 | 170 | { type: 'text-summary' } |
167 | 171 | ] |
... | ... | @@ -172,12 +176,21 @@ module.exports = function (config) { |
172 | 176 | // It was not possible to do it there because karma doesn't let us now if we are |
173 | 177 | // running a single test or not |
174 | 178 | configuration.preprocessors = { |
175 | - 'src/noosfero.js': ['sourcemap'], | |
179 | + 'src/noosfero': ['coverage', 'sourcemap'], | |
176 | 180 | 'src/**/*.ts': ['sourcemap'] |
177 | 181 | }; |
182 | + | |
183 | + configuration.coverageReporter = { | |
184 | + dir: 'coverage/', | |
185 | + reporters: [ | |
186 | + { type: 'html' }, | |
187 | + { type: 'json', file: 'coverage-final.json' }, | |
188 | + { type: 'text-summary' } | |
189 | + ] | |
190 | + }; | |
178 | 191 | } |
179 | - | |
180 | - | |
192 | + | |
193 | + | |
181 | 194 | pathSrcHtml.forEach(function (path) { |
182 | 195 | configuration.preprocessors[path] = ['ng-html2js']; |
183 | 196 | }); | ... | ... |
package.json
... | ... | @@ -7,7 +7,7 @@ |
7 | 7 | "moment": "^2.11.2" |
8 | 8 | }, |
9 | 9 | "scripts": { |
10 | - "coverage": "karma start --single-run & npm run remap-coverage", | |
10 | + "coverage": "karma start --single-run && npm run remap-coverage", | |
11 | 11 | "remap-coverage": "ts-node --project ./dev-scripts ./dev-scripts/remapCoverage.ts", |
12 | 12 | "test-single": "karma start --single-run", |
13 | 13 | "test-and-coverage": "karma start & npm run remap-coverage", |
... | ... | @@ -52,7 +52,7 @@ |
52 | 52 | "gulp-useref": "~1.3.0", |
53 | 53 | "gulp-util": "~3.0.6", |
54 | 54 | "http-proxy-middleware": "~0.9.0", |
55 | - "istanbul": "^1.0.0-alpha.2", | |
55 | + "istanbul": "^0.4.2", | |
56 | 56 | "karma": "~0.13.10", |
57 | 57 | "karma-angular-filesort": "~1.0.0", |
58 | 58 | "karma-chrome-launcher": "^0.2.2", |
... | ... | @@ -71,7 +71,7 @@ |
71 | 71 | "phantomjs": "~1.9.18", |
72 | 72 | "phantomjs-polyfill": "0.0.2", |
73 | 73 | "reflect-metadata": "^0.1.3", |
74 | - "remap-istanbul": "^0.5.1", | |
74 | + "remap-istanbul": "github:sitepen/remap-istanbul", | |
75 | 75 | "replace": "^0.3.0", |
76 | 76 | "ts-loader": "^0.8.1", |
77 | 77 | "ts-node": "^0.5.5", | ... | ... |
src/app/components/navbar/navbar.spec.ts
src/app/components/noosfero-activities/activities.component.ts
0 → 100644
src/app/components/noosfero-articles/article/article_view.spec.ts
... | ... | @@ -2,7 +2,7 @@ |
2 | 2 | import {Input, provide, Component} from 'ng-forward'; |
3 | 3 | import {ArticleView, ArticleDefaultView} from './article_view'; |
4 | 4 | |
5 | -import {createComponentFromClass, quickCreateComponent} from "../../../../spec/helpers.ts"; | |
5 | +import {createComponentFromClass, quickCreateComponent} from "../../../../spec/helpers"; | |
6 | 6 | |
7 | 7 | // this htmlTemplate will be re-used between the container components in this spec file |
8 | 8 | const htmlTemplate: string = '<noosfero-article [article]="ctrl.article" [profile]="ctrl.profile"></noosfero-article>'; | ... | ... |
... | ... | @@ -0,0 +1,13 @@ |
1 | +(function() { | |
2 | + 'use strict'; | |
3 | + angular | |
4 | + .module("noosferoApp") | |
5 | + .filter("noosferoTemplate", function() { | |
6 | + return function(text, options) { | |
7 | + for(var option in options) { | |
8 | + text = text.replace('{'+option+'}', options[option]); | |
9 | + } | |
10 | + return text; | |
11 | + } | |
12 | + }) | |
13 | +})(); | ... | ... |
src/app/components/noosfero/profile-image/profile-image.component.ts
0 → 100644
... | ... | @@ -0,0 +1,21 @@ |
1 | +(function() { | |
2 | + 'use strict'; | |
3 | + | |
4 | + angular | |
5 | + .module('noosferoApp') | |
6 | + .component('noosferoProfileImage', { | |
7 | + templateUrl: 'app/components/noosfero/profile-image/profile-image.html', | |
8 | + bindings: { | |
9 | + profile: '<' | |
10 | + }, | |
11 | + controller: ProfileImageController | |
12 | + }); | |
13 | + | |
14 | + /** @ngInject */ | |
15 | + function ProfileImageController() { | |
16 | + var vm = this; | |
17 | + vm.defaultIcon = 'fa-users'; | |
18 | + if(vm.profile && vm.profile.type==='Person') vm.defaultIcon = 'fa-user'; | |
19 | + } | |
20 | + | |
21 | +})(); | ... | ... |
src/app/index.ts
1 | 1 | |
2 | -import "core-js/shim"; | |
3 | -import "reflect-metadata"; | |
2 | + | |
4 | 3 | import {NoosferoApp} from "./index.module"; |
5 | 4 | import {noosferoModuleConfig} from "./index.config"; |
6 | 5 | import {noosferoAngularRunBlock} from "./index.run"; |
... | ... | @@ -19,7 +18,7 @@ import {bootstrap, bundle} from "ng-forward"; |
19 | 18 | import {AUTH_EVENTS} from "./components/auth/auth_events"; |
20 | 19 | import {AuthController} from "./components/auth/auth_controller"; |
21 | 20 | |
22 | -import {Navbar} from "./components/navbar"; | |
21 | +import {Navbar} from "./components/navbar/navbar"; | |
23 | 22 | |
24 | 23 | declare var moment: any; |
25 | 24 | ... | ... |
src/app/main/main.component.ts
1 | 1 | import {bundle, Component, StateConfig} from "ng-forward"; |
2 | -import {NoosferoArticleBlog} from "./../components/noosfero-articles/blog/blog.component.ts"; | |
2 | +import {NoosferoArticleBlog} from "./../components/noosfero-articles/blog/blog.component"; | |
3 | 3 | |
4 | 4 | import {ArticleView} from "../components/noosfero-articles/article/article_view"; |
5 | 5 | |
... | ... | @@ -16,7 +16,7 @@ import {AuthService} from "./../components/auth/auth_service"; |
16 | 16 | import {Session} from "./../components/auth/session"; |
17 | 17 | |
18 | 18 | |
19 | -import {Navbar} from "../components/navbar"; | |
19 | +import {Navbar} from "../components/navbar/navbar"; | |
20 | 20 | |
21 | 21 | import {MainBlock} from "../components/noosfero-blocks/main-block/main-block.component"; |
22 | 22 | ... | ... |
src/spec/helpers.ts
1 | 1 | |
2 | 2 | import {ngClass, TestComponentBuilder, ComponentFixture} from 'ng-forward/cjs/testing/test-component-builder'; |
3 | -import {quickFixture} from 'ng-forward/cjs/tests/utils'; | |
4 | 3 | import {Provider, Input, provide, Component} from 'ng-forward'; |
5 | 4 | import {User, Person} from "./../app/models/interfaces"; |
6 | 5 | ... | ... |
src/specs.ts
webpack.config.js
... | ... | @@ -13,7 +13,7 @@ if (argv.production) { |
13 | 13 | extension = ".min.js" |
14 | 14 | } |
15 | 15 | |
16 | -var testFiles = glob.sync("./src/**/*.[sS]pec.ts"); | |
16 | +var testFiles = glob.sync("./src/**/**/*.[sS]pec.ts"); | |
17 | 17 | |
18 | 18 | var uglifyLoaderConfig = { |
19 | 19 | // I want to uglify with mangling only app files, not thirdparty libs |
... | ... | @@ -22,16 +22,27 @@ var uglifyLoaderConfig = { |
22 | 22 | loader: "uglify" |
23 | 23 | }; |
24 | 24 | |
25 | -var testingFiles = glob.sync("./src/app/**/*.[sS]pec.ts"); | |
25 | +var testingFiles = glob.sync("./src/app/**/**/*.[sS]pec.ts"); | |
26 | 26 | |
27 | + | |
28 | +var entries = { | |
29 | + noosfero: './src/app/index.ts', | |
30 | + 'noosfero-specs': testFiles,// './src/specs.ts', | |
31 | + 'vendor.bundle': ['core-js', 'reflect-metadata', 'ng-forward', 'ng-forward/cjs/testing/test-component-builder'] | |
32 | +}; | |
33 | + | |
34 | + | |
35 | +// if (argv.test) { | |
36 | +// entries = { | |
37 | +// 'noosfero-src': './src/app/index.ts', | |
38 | +// 'noosfero-specs': testFiles,// './src/specs.ts', | |
39 | +// 'vendor.bundle': ['core-js', 'reflect-metadata', 'ng-forward', 'ng-forward/cjs/testing/test-component-builder'] | |
40 | +// }; | |
41 | +// } | |
27 | 42 | var webpackConfig = { |
28 | - watchDelay: 300, | |
29 | - entry: { | |
30 | - noosfero: './src/app/index.ts', | |
31 | - 'noosfero-specs': './src/specs.ts' | |
32 | - }, | |
43 | + entry: entries, | |
33 | 44 | |
34 | - plugins: [new CommonsChunkPlugin("commons.js")], | |
45 | + plugins: [new CommonsChunkPlugin("commons", "commons.js")], | |
35 | 46 | |
36 | 47 | output: { |
37 | 48 | path: path.join(__dirname, "src"), | ... | ... |