Skip to content

Commit

Permalink
Include raw actual and expected objects in AssertionError (#1432)
Browse files Browse the repository at this point in the history
This is useful for tools, such as wallaby.js, that bind to AVA's private APIs for tighter integration.
  • Loading branch information
ArtemGovorov authored and novemberborn committed Jul 12, 2017
1 parent 0069a7e commit 3f6e134
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 1 deletion.
9 changes: 9 additions & 0 deletions lib/assert.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ class AssertionError extends Error {
this.operator = opts.operator;
this.values = opts.values || [];

// Raw expected and actual objects are stored for custom reporters
// (such as wallaby.js), that manage worker processes directly and
// use the values for custom diff views
this.raw = opts.raw;

// Reserved for power-assert statements
this.statements = [];

Expand Down Expand Up @@ -86,6 +91,7 @@ function wrapAssertions(callbacks) {
fail(this, new AssertionError({
assertion: 'is',
message,
raw: {actual, expected},
values: [formatDescriptorDiff(actualDescriptor, expectedDescriptor)]
}));
}
Expand All @@ -96,6 +102,7 @@ function wrapAssertions(callbacks) {
fail(this, new AssertionError({
assertion: 'not',
message,
raw: {actual, expected},
values: [formatWithLabel('Value is the same as:', actual)]
}));
} else {
Expand All @@ -113,6 +120,7 @@ function wrapAssertions(callbacks) {
fail(this, new AssertionError({
assertion: 'deepEqual',
message,
raw: {actual, expected},
values: [formatDescriptorDiff(actualDescriptor, expectedDescriptor)]
}));
}
Expand All @@ -125,6 +133,7 @@ function wrapAssertions(callbacks) {
fail(this, new AssertionError({
assertion: 'notDeepEqual',
message,
raw: {actual, expected},
values: [formatDescriptorWithLabel('Value is deeply equal:', actualDescriptor)]
}));
} else {
Expand Down
17 changes: 16 additions & 1 deletion test/assert.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ function assertFailure(t, subset) {
t.is(lastFailure.message, subset.message);
t.is(lastFailure.name, 'AssertionError');
t.is(lastFailure.operator, subset.operator);
if (subset.raw) {
t.is(lastFailure.raw.expected, subset.raw.expected);
t.is(lastFailure.raw.actual, subset.raw.actual);
}
if (subset.statements) {
t.is(lastFailure.statements.length, subset.statements.length);
lastFailure.statements.forEach((s, i) => {
Expand Down Expand Up @@ -235,6 +239,7 @@ test('.is()', t => {
}, {
assertion: 'is',
message: '',
raw: {actual: 'foo', expected: 'bar'},
values: [
{label: 'Difference:', formatted: /- 'foo'\n\+ 'bar'/}
]
Expand All @@ -243,7 +248,9 @@ test('.is()', t => {
failsWith(t, () => {
assertions.is('foo', 42);
}, {
actual: 'foo',
assertion: 'is',
expected: 42,
message: '',
values: [
{label: 'Difference:', formatted: /- 'foo'\n\+ 42/}
Expand Down Expand Up @@ -301,6 +308,7 @@ test('.not()', t => {
}, {
assertion: 'not',
message: '',
raw: {actual: 'foo', expected: 'foo'},
values: [{label: 'Value is the same as:', formatted: /foo/}]
});

Expand Down Expand Up @@ -546,6 +554,7 @@ test('.deepEqual()', t => {
}, {
assertion: 'deepEqual',
message: '',
raw: {actual: 'foo', expected: 'bar'},
values: [{label: 'Difference:', formatted: /- 'foo'\n\+ 'bar'/}]
});

Expand All @@ -554,6 +563,7 @@ test('.deepEqual()', t => {
}, {
assertion: 'deepEqual',
message: '',
raw: {actual: 'foo', expected: 42},
values: [{label: 'Difference:', formatted: /- 'foo'\n\+ 42/}]
});

Expand All @@ -577,11 +587,16 @@ test('.notDeepEqual()', t => {
assertions.notDeepEqual(['a', 'b'], ['c', 'd']);
});

const actual = {a: 'a'};
const expected = {a: 'a'};
failsWith(t, () => {
assertions.notDeepEqual({a: 'a'}, {a: 'a'});
assertions.notDeepEqual(actual, expected);
}, {
actual,
assertion: 'notDeepEqual',
expected,
message: '',
raw: {actual, expected},
values: [{label: 'Value is deeply equal:', formatted: /.*\{.*\n.*a: 'a'/}]
});

Expand Down

0 comments on commit 3f6e134

Please sign in to comment.