diff --git a/lib/cmd/cov.js b/lib/cmd/cov.js index 62f0d8e6..7efb80e2 100644 --- a/lib/cmd/cov.js +++ b/lib/cmd/cov.js @@ -77,6 +77,7 @@ class CovCommand extends Command { env: Object.assign({ NODE_ENV: 'test' }, env), }; + // FIXME: remove hotfix after https://github.com/tapjs/spawn-wrap/pull/57 merged yield hotfixSpawnWrap(); // save coverage-xxxx.json to $PWD/coverage @@ -127,14 +128,17 @@ const src = 'var command = path.basename(options.file, \'.exe\')'; const target = 'var command = path.basename(options.file).replace(/\.exe$/i, \'\')'; function* hotfixSpawnWrap() { - yield replaceSpawnWrap(src, target); + if (process.platform === 'win32') { + yield replaceSpawnWrap(src, target); + } } function* rollbackSpawnWrap() { - yield replaceSpawnWrap(target, src); + if (process.platform === 'win32') { + yield replaceSpawnWrap(target, src); + } } - function* replaceSpawnWrap(src, target) { let spawnWrapPath; try { diff --git a/test/lib/cmd/cov.test.js b/test/lib/cmd/cov.test.js index e7ce0d39..9c727dcb 100644 --- a/test/lib/cmd/cov.test.js +++ b/test/lib/cmd/cov.test.js @@ -27,8 +27,38 @@ describe('test/lib/cmd/cov.test.js', () => { child.expect('stdout', /Statements {3}: 80% \( 4[\/|\\]5 \)/); } + if (process.platform === 'win32') { + child.expect('stderr', /\[egg-bin] hotfix spawn-wrap/); + } + + child.expect('code', 0) + .end(err => { + assert.ifError(err); + assert.ok(fs.existsSync(path.join(cwd, 'coverage/coverage-final.json'))); + assert.ok(fs.existsSync(path.join(cwd, 'coverage/coverage-summary.json'))); + assert.ok(fs.existsSync(path.join(cwd, 'coverage/lcov-report/index.html'))); + assert.ok(fs.existsSync(path.join(cwd, 'coverage/lcov.info'))); + done(); + }); + }); + + it('should hotfixSpawnWrap success on mock windows', done => { + mm(process.env, 'TESTS', 'test/**/*.test.js'); + mm(process.env, 'NYC_CWD', cwd); + const child = coffee.fork(eggBin, [ 'cov' ], { cwd }) + .debug() + .beforeScript(path.join(__dirname, 'mock-win32.js')) + .expect('stdout', /should success/) + .expect('stdout', /a\.test\.js/) + .expect('stdout', /b[\/|\\]b\.test\.js/) + .notExpect('stdout', /a.js/); + + // only test on npm run test + if (!process.env.NYC_ROOT_ID) { + child.expect('stdout', /Statements {3}: 80% \( 4[\/|\\]5 \)/); + } + child.expect('stderr', /\[egg-bin] hotfix spawn-wrap/); child.expect('code', 0) - .expect('stderr', /\[egg-bin] hotfix spawn-wrap/) .end(err => { assert.ifError(err); assert.ok(fs.existsSync(path.join(cwd, 'coverage/coverage-final.json'))); diff --git a/test/lib/cmd/mock-win32.js b/test/lib/cmd/mock-win32.js new file mode 100644 index 00000000..da9538a1 --- /dev/null +++ b/test/lib/cmd/mock-win32.js @@ -0,0 +1,4 @@ +'use strict'; + +const mm = require('mm'); +mm(process, 'platform', 'win32');