Browse Source

assert: put info in err.message, not err.name

4716dc6 made assert.equal() and related functions work better by
generating a better toString() from the expected, actual, and operator
values passed to fail(). Unfortunately, this was accomplished by putting
the generated message into the error's `name` property. When you passed
in a custom error message, the error would put the custom error into
`name` *and* `message`, resulting in helpful string representations like
"AssertionError: Oh no: Oh no".

This commit resolves that issue by storing the generated message in the
`message` property while leaving the error's name alone and adding
a regression test so that this doesn't pop back up later.

Closes #5292.
v0.10.5-release
Ryan Doenges 12 years ago
committed by isaacs
parent
commit
6101eb184d
  1. 18
      lib/assert.js
  2. 13
      test/simple/test-assert.js

18
lib/assert.js

@ -38,13 +38,12 @@ var assert = module.exports = ok;
// expected: expected }) // expected: expected })
assert.AssertionError = function AssertionError(options) { assert.AssertionError = function AssertionError(options) {
this.message = options.message; this.name = 'AssertionError';
this.actual = options.actual; this.actual = options.actual;
this.expected = options.expected; this.expected = options.expected;
this.operator = options.operator; this.operator = options.operator;
this.message = options.message || getMessage(this)
var stackStartFunction = options.stackStartFunction || fail; var stackStartFunction = options.stackStartFunction || fail;
this.name = getName(this, options.message);
Error.captureStackTrace(this, stackStartFunction); Error.captureStackTrace(this, stackStartFunction);
}; };
@ -72,15 +71,10 @@ function truncate(s, n) {
} }
} }
function getName(self, message) { function getMessage(self) {
if (message) { return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
return 'AssertionError: ' + message; self.operator + ' ' +
} else { truncate(JSON.stringify(self.expected, replacer), 128);
return 'AssertionError: ' +
truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
self.operator + ' ' +
truncate(JSON.stringify(self.expected, replacer), 128);
}
} }
// At present only the three keys mentioned above are used and // At present only the three keys mentioned above are used and

13
test/simple/test-assert.js

@ -293,3 +293,16 @@ try {
assert.equal(e.message, 'Missing expected exception..'); assert.equal(e.message, 'Missing expected exception..');
} }
assert.ok(threw); assert.ok(threw);
// #5292
try {
assert.equal(1, 2);
} catch (e) {
assert.equal(e.toString().split('\n')[0], 'AssertionError: 1 == 2')
}
try {
assert.equal(1, 2, 'oh no');
} catch (e) {
assert.equal(e.toString().split('\n')[0], 'AssertionError: oh no')
}

Loading…
Cancel
Save