Commit 6f744e765280af1c0ad3ed2b6e102bf32d9c57b3

Authored by ABNER SILVA DE OLIVEIRA
1 parent d316e303

added coverage

.vscode/tasks.json
@@ -18,8 +18,10 @@ @@ -18,8 +18,10 @@
18 ] 18 ]
19 }, 19 },
20 { 20 {
  21 + "taskName": "coverage"
  22 + },
  23 + {
21 "taskName": "test", 24 "taskName": "test",
22 - "args": ["test"],  
23 "isTestCommand": true 25 "isTestCommand": true
24 } 26 }
25 ] 27 ]
dev-scripts/node_modules
@@ -1 +0,0 @@ @@ -1 +0,0 @@
1 -../node_modules  
2 \ No newline at end of file 0 \ No newline at end of file
dev-scripts/remapCoverage.ts 0 → 100644
@@ -0,0 +1,66 @@ @@ -0,0 +1,66 @@
  1 +/**
  2 + * @script remap-coverage.ts
  3 + *
  4 + * Esse script serve para transformar as informações de cobertura geradas pelo karma-coverage
  5 + * e que originalmente é construída apontando para os arquivos javascript (já que os testes são executados em javascript)
  6 + * para a informação de cobertura apontando para os arquivos Typescript, utilizando os source maps gerados pelo compilador
  7 + * typescript
  8 + * @author: Abner Oliveira
  9 + *
  10 + * Examplo de uso:
  11 + *
  12 + * Na linha de comando, na pasta raiz do projeto, digite:
  13 + *
  14 + * ts-node dev-scripts/remap-coverage.ts
  15 + *
  16 + * Observação: O karma já deve ter sido executado antes, e a pasta de coverage deve ser "./coverage"
  17 + */
  18 +
  19 +import * as path from "path";
  20 +import * as fs from "fs";
  21 +
  22 +let remapIstanbul = require("remap-istanbul");
  23 +
  24 +// pasta onde os arquivos do coverage são gerados
  25 +let coveragePath = path.join(__dirname, "..", "coverage");
  26 +
  27 +// o pré-processador "coverage" do runner de tests "karma" gera uma pasta
  28 +// de coverage para cada browser em que os testes foram executados
  29 +// iteraremos arqui então entre essas pastas para realizar o remap de cada uma
  30 +
  31 +console.log("COVERAGE PATH:", coveragePath);
  32 +// lendo o diretório coveragePath
  33 +fs.readdir(coveragePath, (err, directories) => {
  34 + if (err) {
  35 + console.error(err.message);
  36 + throw err;
  37 + }
  38 + // para cada diretório na pasta coveragePath faz map transformando o path para o caminho absoluto
  39 + directories.map((file) => {
  40 + return path.join(coveragePath, file);
  41 + }).forEach((coverageFolder) => {
  42 +
  43 + let coverageFile = path.join(coverageFolder, "coverage-final.json");
  44 +
  45 + let replace = require("replace");
  46 +
  47 + let absoluteProjectPath = path.join(__dirname, "../");
  48 +
  49 + replace({
  50 + regex: absoluteProjectPath,
  51 + replacement: "",
  52 + paths: [coverageFile],
  53 + sillent: true
  54 + });
  55 + // para cada pasta executa o remap do coverage que está apontando para os arquivos js
  56 + // para apontar para os arquivos Typecript
  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 + });
  64 + });
  65 +
  66 +});
0 \ No newline at end of file 67 \ No newline at end of file
@@ -4,6 +4,44 @@ @@ -4,6 +4,44 @@
4 var path = require('path'); 4 var path = require('path');
5 var conf = require('./gulp/conf'); 5 var conf = require('./gulp/conf');
6 6
  7 +var argv = require("yargs").argv;
  8 +
  9 +var singleRun = false;
  10 +
  11 +if (argv.singleRun) {
  12 + singleRun = true;
  13 +}
  14 +
  15 +var projectFiles = [
  16 + './src/commons.js',
  17 + './src/noosfero.js',
  18 + './src/noosfero-specs.js'
  19 +];
  20 +
  21 +var karmaPlugins = [
  22 + 'karma-chrome-launcher',
  23 + 'karma-phantomjs-launcher',
  24 + 'karma-angular-filesort',
  25 + 'karma-phantomjs-shim',
  26 + 'karma-jasmine',
  27 + 'karma-spec-reporter',
  28 + 'karma-ng-html2js-preprocessor',
  29 + 'karma-sourcemap-loader'
  30 +];
  31 +
  32 +
  33 +var karmaReporters = ['spec'];
  34 +
  35 +if (argv.coverage) {
  36 + //projectFiles = ['./src/shim.ts', './src/app/index.ts', './src/**/*.spec.ts'];
  37 + singleRun = true;
  38 +
  39 + karmaPlugins.push('karma-coverage');
  40 + //karmaPlugins.push('karma-webpack');
  41 +
  42 + karmaReporters.push('coverage');
  43 +}
  44 +
7 45
8 var _ = require('lodash'); 46 var _ = require('lodash');
9 var wiredep = require('wiredep'); 47 var wiredep = require('wiredep');
@@ -13,7 +51,7 @@ var pathSrcHtml = [ @@ -13,7 +51,7 @@ var pathSrcHtml = [
13 ]; 51 ];
14 52
15 var glob = require("glob"); 53 var glob = require("glob");
16 -var testFiles = glob.sync("./src/**/*.[sS]pec.ts"); 54 +//var testFiles = glob.sync("./src/**/*.[sS]pec.ts");
17 55
18 function listFiles() { 56 function listFiles() {
19 var wiredepOptions = _.extend({}, conf.wiredep, { 57 var wiredepOptions = _.extend({}, conf.wiredep, {
@@ -22,22 +60,7 @@ function listFiles() { @@ -22,22 +60,7 @@ function listFiles() {
22 }); 60 });
23 61
24 var patterns = [].concat(wiredep(wiredepOptions).js) 62 var patterns = [].concat(wiredep(wiredepOptions).js)
25 - .concat([  
26 - './src/commons.js',  
27 - './src/noosfero.js',  
28 - './src/noosfero-specs.js'  
29 - ]  
30 - //[  
31 - //path.join(conf.paths.src, 'common.js'),  
32 - //, path.join(conf.paths.src, 'index.ts')  
33 - //path.join(conf.paths.src, 'test.js')  
34 - // path.join(conf.paths.src, '/app/**/*.module.js'),  
35 - // path.join(conf.paths.src, '/app/**/*.js'),  
36 - // path.join(conf.paths.src, '/**/*.spec.js'),  
37 - // path.join(conf.paths.src, '/**/*.mock.js')  
38 -  
39 - //]  
40 - ) 63 + .concat(projectFiles)
41 .concat(pathSrcHtml); 64 .concat(pathSrcHtml);
42 65
43 var files = patterns.map(function (pattern) { 66 var files = patterns.map(function (pattern) {
@@ -51,11 +74,11 @@ function listFiles() { @@ -51,11 +74,11 @@ function listFiles() {
51 served: true, 74 served: true,
52 watched: false 75 watched: false
53 }); 76 });
54 - files.push({  
55 - pattern: path.join(conf.paths.src, '/test.js.map'),  
56 - included: false,  
57 - served: true  
58 - }); 77 + // files.push({
  78 + // pattern: path.join(conf.paths.src, '/test.js.map'),
  79 + // included: false,
  80 + // served: true
  81 + // });
59 return files; 82 return files;
60 } 83 }
61 84
@@ -64,9 +87,11 @@ var webpackConfig = require("./webpack.config.js"); @@ -64,9 +87,11 @@ var webpackConfig = require("./webpack.config.js");
64 module.exports = function (config) { 87 module.exports = function (config) {
65 88
66 var configuration = { 89 var configuration = {
  90 + basePath: '../angular-theme',
  91 +
67 files: listFiles(), 92 files: listFiles(),
68 93
69 - singleRun: false, 94 + singleRun: singleRun,
70 95
71 autoWatch: true, 96 autoWatch: true,
72 colors: true, 97 colors: true,
@@ -87,48 +112,71 @@ module.exports = function (config) { @@ -87,48 +112,71 @@ module.exports = function (config) {
87 112
88 browsers: ['PhantomJS'], 113 browsers: ['PhantomJS'],
89 114
90 - /* webpack: _.merge({  
91 -  
92 - }, webpackConfig, {  
93 - devtool: 'inline-source-map'  
94 - }),  
95 - webpackServer: {  
96 - quite: true  
97 - },*/  
98 - plugins: [  
99 -// require('karma-webpack'),  
100 - 'karma-chrome-launcher',  
101 - 'karma-phantomjs-launcher',  
102 - 'karma-angular-filesort',  
103 - 'karma-webpack',  
104 - 'karma-phantomjs-shim',  
105 - 'karma-coverage',  
106 - 'karma-jasmine',  
107 - 'karma-spec-reporter',  
108 - 'karma-ng-html2js-preprocessor',  
109 - 'karma-sourcemap-loader'  
110 - ],  
111 -  
112 - coverageReporter: {  
113 - type: 'html',  
114 - dir: 'coverage/'  
115 - },  
116 115
117 - reporters: ['spec', "coverage"], 116 + plugins: karmaPlugins,
  117 +
  118 +
  119 +
  120 + reporters: karmaReporters,
118 121
119 proxies: { 122 proxies: {
120 '/assets/': path.join('/base/', conf.paths.src, '/assets/') 123 '/assets/': path.join('/base/', conf.paths.src, '/assets/')
121 } 124 }
122 }; 125 };
123 126
124 - // This is the default preprocessors configuration for a usage with Karma cli  
125 - // The coverage preprocessor is added in gulp/unit-test.js only for single tests  
126 - // It was not possible to do it there because karma doesn't let us now if we are  
127 - // running a single test or not  
128 - configuration.preprocessors = {  
129 - 'src/**/*.js': ['sourcemap'],  
130 - 'src/**/*.ts': ['sourcemap']  
131 - }; 127 + if (argv.coverage) {
  128 +
  129 + /*configuration.webpack = {
  130 + module: {
  131 + loaders: [
  132 + {
  133 + test: /\.tsx?$/,
  134 + loader: 'ts-loader'
  135 + }
  136 + ]
  137 + },
  138 + resolve: {
  139 + extensions: ['', '.webpack.js', '.web.js', '.ts', '.tsx', '.js'],
  140 + modulesDirectories: ['node_modules'],
  141 + root: path.resolve(__dirname)
  142 + }
  143 + };*/
  144 + /*configuration.webpack = _.merge({
  145 +
  146 + }, webpackConfig, {
  147 + devtool: 'source-map'
  148 + }),
  149 + configuration.webpackServer = {
  150 + quite: true
  151 + };*/
  152 +
  153 + // This is the default preprocessors configuration for a usage with Karma cli
  154 + // The coverage preprocessor is added in gulp/unit-test.js only for single tests
  155 + // It was not possible to do it there because karma doesn't let us now if we are
  156 + // running a single test or not
  157 + configuration.preprocessors = {
  158 + 'src/noosfero.js': ['sourcemap', 'coverage']
  159 + };
  160 +
  161 + configuration.coverageReporter = {
  162 + dir: 'coverage/',
  163 + reporters: [
  164 + /*{ type: 'html' },*/
  165 + { type: 'json', file: 'coverage-final.json' },
  166 + { type: 'text-summary' }
  167 + ]
  168 + };
  169 + } else {
  170 + // This is the default preprocessors configuration for a usage with Karma cli
  171 + // The coverage preprocessor is added in gulp/unit-test.js only for single tests
  172 + // It was not possible to do it there because karma doesn't let us now if we are
  173 + // running a single test or not
  174 + configuration.preprocessors = {
  175 + 'src/noosfero.js': ['sourcemap'],
  176 + 'src/**/*.ts': ['sourcemap']
  177 + };
  178 + }
  179 +
132 // 'src/**/*.js': ['sourcemap'], 180 // 'src/**/*.js': ['sourcemap'],
133 // 'src/**/*.[sS]pec.ts': ['sourcemap'] 181 // 'src/**/*.[sS]pec.ts': ['sourcemap']
134 // }; 182 // };
@@ -7,6 +7,9 @@ @@ -7,6 +7,9 @@
7 "moment": "^2.11.2" 7 "moment": "^2.11.2"
8 }, 8 },
9 "scripts": { 9 "scripts": {
  10 + "coverage": "karma start --coverage & npm run remap-coverage",
  11 + "remap-coverage": "ts-node --project ./dev-scripts ./dev-scripts/remapCoverage.ts",
  12 + "test-single": "webpack && karma start --single-run",
10 "test": "concurrently \"webpack -w\" \"karma start\"", 13 "test": "concurrently \"webpack -w\" \"karma start\"",
11 "postinstall": "npm install -g bower && bower install", 14 "postinstall": "npm install -g bower && bower install",
12 "start": "concurrently \"webpack -w\" \"gulp serve\"", 15 "start": "concurrently \"webpack -w\" \"gulp serve\"",
@@ -48,6 +51,7 @@ @@ -48,6 +51,7 @@
48 "gulp-useref": "~1.3.0", 51 "gulp-useref": "~1.3.0",
49 "gulp-util": "~3.0.6", 52 "gulp-util": "~3.0.6",
50 "http-proxy-middleware": "~0.9.0", 53 "http-proxy-middleware": "~0.9.0",
  54 + "istanbul": "^1.0.0-alpha.2",
51 "karma": "~0.13.10", 55 "karma": "~0.13.10",
52 "karma-angular-filesort": "~1.0.0", 56 "karma-angular-filesort": "~1.0.0",
53 "karma-chrome-launcher": "^0.2.2", 57 "karma-chrome-launcher": "^0.2.2",
@@ -65,6 +69,8 @@ @@ -65,6 +69,8 @@
65 "phantomjs": "~1.9.18", 69 "phantomjs": "~1.9.18",
66 "phantomjs-polyfill": "0.0.2", 70 "phantomjs-polyfill": "0.0.2",
67 "reflect-metadata": "^0.1.3", 71 "reflect-metadata": "^0.1.3",
  72 + "remap-istanbul": "^0.5.1",
  73 + "replace": "^0.3.0",
68 "ts-loader": "^0.8.1", 74 "ts-loader": "^0.8.1",
69 "ts-node": "^0.5.5", 75 "ts-node": "^0.5.5",
70 "typescript": "^1.8.2", 76 "typescript": "^1.8.2",
webpack.config.js
@@ -42,7 +42,7 @@ var webpackConfig = { @@ -42,7 +42,7 @@ var webpackConfig = {
42 extensions: ['', '.webpack.js', '.web.js', '.ts', '.tsx', '.js'] 42 extensions: ['', '.webpack.js', '.web.js', '.ts', '.tsx', '.js']
43 }, 43 },
44 // Source maps support (or 'inline-source-map' also works) 44 // Source maps support (or 'inline-source-map' also works)
45 - devtool: 'inline-source-map', 45 + devtool: 'source-map',
46 46
47 module: { 47 module: {
48 loaders: [{ 48 loaders: [{