Add coveralls.
John-David Dalton committed
Dec 21, 2015 at 14:05 UTC
9b0ef9244d39b60a12e40f66ff96daf107a8380c
3 files changed
+88
-12
.gitignore
+1
@@ -7,6 +7,7 @@ static
7
_SpecRunner.html
8
__benchmarks__
9
build/
10
+coverage/
11
.module-cache
12
*.gem
13
docs/.bundle
grunt/tasks/jest.js
+74
-12
@@ -6,25 +6,87 @@
6
7
'use strict';
8
9
+var assign = require('object-assign');
10
+var async = require('async');
11
+var fs = require('fs');
12
+var glob = require('glob');
13
var grunt = require('grunt');
14
var path = require('path');
15
16
+var rootPath = path.resolve('.');
17
+var buildPath = path.join(rootPath, 'build');
18
+var tempConfigPath = path.join(buildPath, 'jest-config.json');
19
+
20
+var config = require(path.join(rootPath, 'package.json')).jest;
21
+
22
+function getCollectCoverageOnlyFrom(callback) {
23
+ var coverageFrom = config.collectCoverageOnlyFrom;
24
+ var patterns = Object.keys((config.collectCoverage && coverageFrom) || {});
25
+ var result = {};
26
+
27
+ async.each(patterns, function(pattern) {
28
+ var options = assign({ nodir: true }, coverageFrom[pattern]);
29
+ glob(pattern, options, function(err, files) {
30
+ (files || []).reduce(function(object, key) {
31
+ object[key] = true;
32
+ return object;
33
+ }, result);
34
+
35
+ callback(err);
36
+ });
37
+ }, function(err) {
38
+ callback(err, result);
39
+ });
40
+}
41
+
42
+function getJestConfig(callback) {
43
+ var rootDir = path.resolve(buildPath, path.resolve(config.rootDir));
44
+ getCollectCoverageOnlyFrom(function(err, data) {
45
+ callback(err, assign({}, config, {
46
+ rootDir: rootDir,
47
+ collectCoverageOnlyFrom: data,
48
+ }));
49
+ });
50
+}
51
+
52
+function onError(err) {
53
+ grunt.log.error('jest failed');
54
+ grunt.log.error(err);
55
+}
56
+
57
+function writeTempConfig(callback) {
58
+ getJestConfig(function(err, data) {
59
+ if (err) {
60
+ callback(err);
61
+ } else {
62
+ fs.writeFile(tempConfigPath, JSON.stringify(data, null, ' '), 'utf8', callback);
63
+ }
64
+ });
65
+}
66
+
67
module.exports = function() {
68
var done = this.async();
69
+
70
grunt.log.writeln('running jest (this may take a while)');
15
- grunt.util.spawn({
16
- cmd: 'node',
17
- args: ['--harmony', path.join('node_modules', 'jest-cli', 'bin', 'jest')],
18
- opts: {stdio: 'inherit', env: {NODE_ENV: 'test'}},
19
- }, function(err, result, code) {
20
- if (err) {
21
- grunt.log.error('jest failed');
22
- grunt.log.error(err);
23
- } else {
24
- grunt.log.ok('jest passed');
71
+
72
+ writeTempConfig(function(writeErr) {
73
+ if (writeErr) {
74
+ onError(writeErr);
75
+ return;
76
}
26
- grunt.log.writeln(result.stdout);
77
+ grunt.util.spawn({
78
+ cmd: 'node',
79
+ args: ['--harmony', path.join('node_modules', 'jest-cli', 'bin', 'jest'), '--config', tempConfigPath],
80
+ opts: { stdio: 'inherit', env: { NODE_ENV: 'test' } },
81
+ }, function(spawnErr, result, code) {
82
+ if (spawnErr) {
83
+ onError(spawnErr);
84
+ } else {
85
+ grunt.log.ok('jest passed');
86
+ }
87
+ grunt.log.writeln(result.stdout);
88
28
- done(code === 0);
89
+ done(code === 0);
90
+ });
91
});
92
};
package.json
+13
@@ -3,12 +3,14 @@
3
"private": true,
4
"version": "0.15.0-alpha",
5
"devDependencies": {
6
+ "async": "^1.5.0",
7
"babel": "^5.8.29",
8
"babel-eslint": "4.1.5",
9
"benchmark": "^1.0.0",
10
"browserify": "^12.0.1",
11
"bundle-collapser": "^1.1.1",
12
"coffee-script": "^1.8.0",
13
+ "coveralls": "^2.11.6",
14
"del": "^2.0.2",
15
"derequire": "^2.0.3",
16
"envify": "^3.0.0",
@@ -17,6 +19,7 @@
19
"eslint-plugin-react-internal": "file:eslint-rules",
20
"fbjs": "^0.4.0",
21
"fbjs-scripts": "^0.5.0",
22
+ "glob": "^6.0.1",
23
"grunt": "^0.4.5",
24
"grunt-cli": "^0.1.13",
25
"grunt-compare-size": "^0.4.0",
@@ -54,6 +57,16 @@
57
"test": "jest"
58
},
59
"jest": {
60
+ "collectCoverage": true,
61
+ "collectCoverageOnlyFrom": {
62
+ "src/**/*.js": {
63
+ "ignore": [
64
+ "src/**/__tests__/*.js",
65
+ "src/shared/vendor/third_party/*.js",
66
+ "src/test/*.js"
67
+ ]
68
+ }
69
+ },
70
"modulePathIgnorePatterns": [
71
"/.module-cache/",
72
"/react/build/"