Skip to content

Commit

Permalink
Merge pull request #5 from zendesk/dderidder/X-mochajs-pr-review-part3
Browse files Browse the repository at this point in the history
Address PR comments; use os.constants
  • Loading branch information
73rhodes committed Apr 15, 2024
2 parents b6e6d30 + d2991a1 commit 7cf79d8
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 11 deletions.
9 changes: 7 additions & 2 deletions bin/mocha.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ const {aliases} = require('../lib/cli/run-option-metadata');

const mochaArgs = {};
const nodeArgs = {};
const EXIT_SUCCESS = 0;
const EXIT_FAILURE = 1;
const SIGNAL_OFFSET= 128;
let hasInspect = false;

const opts = loadOptions(process.argv.slice(2));
Expand Down Expand Up @@ -113,12 +116,14 @@ if (mochaArgs['node-option'] || Object.keys(nodeArgs).length || hasInspect) {
const numericSignal =
typeof signal === 'string' ? os.constants.signals[signal] : signal;
if (mochaArgs['posix-exit-codes'] === true) {
process.exit(128 + numericSignal);
process.exit(SIGNAL_OFFSET + numericSignal);
} else {
process.kill(process.pid, signal);
}
} else if (code !== 0 && mochaArgs['posix-exit-codes'] === true) {
process.exit(EXIT_FAILURE);
} else {
process.exit((mochaArgs['posix-exit-codes'] === true) ? 0 : code);
process.exit(code);
}
});
});
Expand Down
2 changes: 1 addition & 1 deletion lib/cli/run.js
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ exports.builder = yargs =>
group: GROUPS.RULES
},
'posix-exit-codes': {
description: 'Use posix exit codes for fatal signals',
description: 'Use POSIX and UNIX shell exit codes as Mocha\'s return value',
group: GROUPS.RULES
},
recursive: {
Expand Down
23 changes: 23 additions & 0 deletions test/integration/fixtures/failing.fixture.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
'use strict';

// One passing test and three failing tests

var assert = require('assert');

describe('suite', function () {
it('test1', function () {
assert(true);
});

it('test2', function () {
assert(false);
});

it('test3', function () {
assert(false);
});

it('test4', function () {
assert(false);
});
});
22 changes: 14 additions & 8 deletions test/integration/options/posixExitCodes.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,40 +2,45 @@

var helpers = require('../helpers');
var runMocha = helpers.runMocha;
var os = require('os');

const EXIT_SUCCESS = 0;
const EXIT_FAILURE = 1;
const SIGNAL_OFFSET = 128;

describe('--posix-exit-codes', function () {
describe('when enabled, and with node options', function () {
var args = ['--no-warnings', '--posix-exit-codes'];

it('should exit with code 134 on SIGABRT', function (done) {
it('should exit with correct POSIX shell code on SIGABRT', function (done) {
var fixture = 'signals-sigabrt.fixture.js';
runMocha(fixture, args, function postmortem(err, res) {
if (err) {
return done(err);
}
expect(res.code, 'to be', 134);
expect(res.code, 'to be', SIGNAL_OFFSET + os.constants.signals.SIGABRT);
done();
});
});

it('should exit with code 143 on SIGTERM', function (done) {
it('should exit with correct POSIX shell code on SIGTERM', function (done) {
var fixture = 'signals-sigterm.fixture.js';
runMocha(fixture, args, function postmortem(err, res) {
if (err) {
return done(err);
}
expect(res.code, 'to be', 143);
expect(res.code, 'to be', SIGNAL_OFFSET + os.constants.signals.SIGTERM);
done();
});
});

it('should exit with code 0 even if there are test failures', function (done) {
it('should exit with code 1 if there are test failures', function (done) {
var fixture = 'failing.fixture.js';
runMocha(fixture, args, function postmortem(err, res) {
if (err) {
return done(err);
}
expect(res.code, 'to be', 0);
expect(res.code, 'to be', EXIT_FAILURE);
done();
});
});
Expand All @@ -55,13 +60,14 @@ describe('--posix-exit-codes', function () {
});

it('should exit with the number of failed tests', function (done) {
var fixture = 'failing.fixture.js'; // one failing test
var fixture = 'failing.fixture.js'; // contains three failing tests
var numFailures = 3;
var args = ['--no-warnings'];
runMocha(fixture, args, function postmortem(err, res) {
if (err) {
return done(err);
}
expect(res.code, 'to be', 1);
expect(res.code, 'to be', numFailures);
done();
});
});
Expand Down

0 comments on commit 7cf79d8

Please sign in to comment.