|
6 | 6 |
|
7 | 7 | 'use strict';
|
8 | 8 |
|
| 9 | +var assign = require('object-assign'); |
| 10 | +var async = require('async'); |
| 11 | +var fs = require('fs'); |
| 12 | +var glob = require('glob'); |
9 | 13 | var grunt = require('grunt');
|
10 | 14 | var path = require('path');
|
11 | 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 | + |
12 | 67 | module.exports = function() {
|
13 | 68 | var done = this.async();
|
| 69 | + |
14 | 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; |
25 | 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); |
27 | 88 |
|
28 |
| - done(code === 0); |
| 89 | + done(code === 0); |
| 90 | + }); |
29 | 91 | });
|
30 | 92 | };
|
0 commit comments