diff --git a/.travis.yml b/.travis.yml index ba63714af4..dd79d30965 100644 --- a/.travis.yml +++ b/.travis.yml @@ -65,13 +65,21 @@ script: -F "branch=$TRAVIS_BRANCH" \ $SERVER fi + elif [ "$TEST_TYPE" = test ]; then + if [ "$TRAVIS_PULL_REQUEST" = false ]; then + set -e + ./node_modules/.bin/grunt jest:coverage + cat ./coverage/lcov.info | ./node_modules/.bin/coveralls + else + ./node_modules/.bin/grunt jest:normal + fi else ./node_modules/.bin/grunt $TEST_TYPE fi env: matrix: - TEST_TYPE=build - - TEST_TYPE=jest + - TEST_TYPE=test - TEST_TYPE=lint - TEST_TYPE=build_website global: @@ -81,6 +89,8 @@ env: - secure: dkpPW+VnoqC/okhRdV90m36NcyBFhcwEKL3bNFExAwi0dXnFao8RoFlvnwiPlA23h2faROkMIetXlti6Aju08BgUFV+f9aL6vLyU7gUent4Nd3413zf2fwDtXIWIETg6uLnOpSykGKgCAT/hY3Q2oPLqOoY0OxfgnbqwxkxljrE= # GITHUB_TOKEN - secure: EHCyCSKMwKlLHNtcj9nmkRzmiiPE3aDGlPcnEyrDJeRI0SeN/iCXHXfFivR0vFq3vr+9naMBczAR2AEidtps5KbJrKqdZnjPFRbmfVtzWr/LlvVCub3u13Pub6TdKIVBTny1PuZ5X8GvdxMNVig89jGjvzhhWuQRaz3VhJnTra4= + # COVERALLS_TOKEN + - secure: h/cUq+TrUMZOQmkFD7CvuwX0uAwmjIfKZ4qSUzY+QzUtDzOzA0L/XF84xTBq1Q5YYsEiaoF6GxxGCdrLQiBA/ZTd+88UHgeZPMRvi0xG9Q+PeePVOsZMTxy4/WWFgOfSQCk49Mj9zizGgO78i6vxq+SDXMtFHnZ+TpPJIEW6/m0= matrix: fast_finish: true notifications: diff --git a/Gruntfile.js b/Gruntfile.js index 410a77b813..df98b515f3 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -111,10 +111,12 @@ module.exports = function(grunt) { ]); grunt.registerTask('build:react-dom', require('./grunt/tasks/react-dom')); - grunt.registerTask('test', ['jest']); - grunt.registerTask('npm:test', ['build', 'npm:pack']); + var jestTasks = require('./grunt/tasks/jest'); + grunt.registerTask('jest:normal', jestTasks.normal); + grunt.registerTask('jest:coverage', jestTasks.coverage); - grunt.registerTask('jest', require('./grunt/tasks/jest')); + grunt.registerTask('test', ['jest:normal']); + grunt.registerTask('npm:test', ['build', 'npm:pack']); // Optimized build task that does all of our builds. The subtasks will be run // in order so we can take advantage of that and only run build-modules once. diff --git a/grunt/tasks/jest.js b/grunt/tasks/jest.js index ca8dda4a81..8503ca3dca 100644 --- a/grunt/tasks/jest.js +++ b/grunt/tasks/jest.js @@ -19,13 +19,22 @@ var tempConfigPath = path.join(buildPath, 'jest-config.json'); var config = require(path.join(rootPath, 'package.json')).jest; +var collectCoverageOnlyFrom = { + 'src/**/*.js': { + ignore: [ + 'src/**/__tests__/*.js', + 'src/shared/vendor/third_party/*.js', + 'src/test/*.js', + ], + }, +}; + function getCollectCoverageOnlyFrom(callback) { - var coverageFrom = config.collectCoverageOnlyFrom; - var patterns = Object.keys((config.collectCoverage && coverageFrom) || {}); + var patterns = Object.keys(collectCoverageOnlyFrom); var result = {}; async.each(patterns, function(pattern) { - var options = assign({ nodir: true }, coverageFrom[pattern]); + var options = assign({ nodir: true }, collectCoverageOnlyFrom[pattern]); glob(pattern, options, function(err, files) { (files || []).reduce(function(object, key) { object[key] = true; @@ -44,6 +53,7 @@ function getJestConfig(callback) { getCollectCoverageOnlyFrom(function(err, data) { callback(err, assign({}, config, { rootDir: rootDir, + collectCoverage: true, collectCoverageOnlyFrom: data, })); }); @@ -64,29 +74,48 @@ function writeTempConfig(callback) { }); } -module.exports = function() { - var done = this.async(); - +function run(done, configPath) { grunt.log.writeln('running jest (this may take a while)'); + var args = ['--harmony', path.join('node_modules', 'jest-cli', 'bin', 'jest')]; + if (configPath) { + args.push('--config', configPath); + } + grunt.util.spawn({ + cmd: 'node', + args: args, + opts: { stdio: 'inherit', env: { NODE_ENV: 'test' } }, + }, function(spawnErr, result, code) { + if (spawnErr) { + onError(spawnErr); + } else { + grunt.log.ok('jest passed'); + } + grunt.log.writeln(result.stdout); + + done(code === 0); + }); +} + +function runJestNormally() { + var done = this.async(); + run(done); +} + +function runJestWithCoverage() { + var done = this.async(); + writeTempConfig(function(writeErr) { if (writeErr) { onError(writeErr); return; } - grunt.util.spawn({ - cmd: 'node', - args: ['--harmony', path.join('node_modules', 'jest-cli', 'bin', 'jest'), '--config', tempConfigPath], - opts: { stdio: 'inherit', env: { NODE_ENV: 'test' } }, - }, function(spawnErr, result, code) { - if (spawnErr) { - onError(spawnErr); - } else { - grunt.log.ok('jest passed'); - } - grunt.log.writeln(result.stdout); - done(code === 0); - }); + run(done, tempConfigPath); }); +} + +module.exports = { + normal: runJestNormally, + coverage: runJestWithCoverage, }; diff --git a/package.json b/package.json index 78ee20c332..081b16775c 100644 --- a/package.json +++ b/package.json @@ -57,16 +57,6 @@ "test": "jest" }, "jest": { - "collectCoverage": true, - "collectCoverageOnlyFrom": { - "src/**/*.js": { - "ignore": [ - "src/**/__tests__/*.js", - "src/shared/vendor/third_party/*.js", - "src/test/*.js" - ] - } - }, "modulePathIgnorePatterns": [ "/.module-cache/", "/react/build/"