Skip to content

Commit 3f6e134

Browse files
ArtemGovorovnovemberborn
authored andcommitted
Include raw actual and expected objects in AssertionError (#1432)
This is useful for tools, such as wallaby.js, that bind to AVA's private APIs for tighter integration.
1 parent 0069a7e commit 3f6e134

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

lib/assert.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ class AssertionError extends Error {
3939
this.operator = opts.operator;
4040
this.values = opts.values || [];
4141

42+
// Raw expected and actual objects are stored for custom reporters
43+
// (such as wallaby.js), that manage worker processes directly and
44+
// use the values for custom diff views
45+
this.raw = opts.raw;
46+
4247
// Reserved for power-assert statements
4348
this.statements = [];
4449

@@ -86,6 +91,7 @@ function wrapAssertions(callbacks) {
8691
fail(this, new AssertionError({
8792
assertion: 'is',
8893
message,
94+
raw: {actual, expected},
8995
values: [formatDescriptorDiff(actualDescriptor, expectedDescriptor)]
9096
}));
9197
}
@@ -96,6 +102,7 @@ function wrapAssertions(callbacks) {
96102
fail(this, new AssertionError({
97103
assertion: 'not',
98104
message,
105+
raw: {actual, expected},
99106
values: [formatWithLabel('Value is the same as:', actual)]
100107
}));
101108
} else {
@@ -113,6 +120,7 @@ function wrapAssertions(callbacks) {
113120
fail(this, new AssertionError({
114121
assertion: 'deepEqual',
115122
message,
123+
raw: {actual, expected},
116124
values: [formatDescriptorDiff(actualDescriptor, expectedDescriptor)]
117125
}));
118126
}
@@ -125,6 +133,7 @@ function wrapAssertions(callbacks) {
125133
fail(this, new AssertionError({
126134
assertion: 'notDeepEqual',
127135
message,
136+
raw: {actual, expected},
128137
values: [formatDescriptorWithLabel('Value is deeply equal:', actualDescriptor)]
129138
}));
130139
} else {

test/assert.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ function assertFailure(t, subset) {
3939
t.is(lastFailure.message, subset.message);
4040
t.is(lastFailure.name, 'AssertionError');
4141
t.is(lastFailure.operator, subset.operator);
42+
if (subset.raw) {
43+
t.is(lastFailure.raw.expected, subset.raw.expected);
44+
t.is(lastFailure.raw.actual, subset.raw.actual);
45+
}
4246
if (subset.statements) {
4347
t.is(lastFailure.statements.length, subset.statements.length);
4448
lastFailure.statements.forEach((s, i) => {
@@ -235,6 +239,7 @@ test('.is()', t => {
235239
}, {
236240
assertion: 'is',
237241
message: '',
242+
raw: {actual: 'foo', expected: 'bar'},
238243
values: [
239244
{label: 'Difference:', formatted: /- 'foo'\n\+ 'bar'/}
240245
]
@@ -243,7 +248,9 @@ test('.is()', t => {
243248
failsWith(t, () => {
244249
assertions.is('foo', 42);
245250
}, {
251+
actual: 'foo',
246252
assertion: 'is',
253+
expected: 42,
247254
message: '',
248255
values: [
249256
{label: 'Difference:', formatted: /- 'foo'\n\+ 42/}
@@ -301,6 +308,7 @@ test('.not()', t => {
301308
}, {
302309
assertion: 'not',
303310
message: '',
311+
raw: {actual: 'foo', expected: 'foo'},
304312
values: [{label: 'Value is the same as:', formatted: /foo/}]
305313
});
306314

@@ -546,6 +554,7 @@ test('.deepEqual()', t => {
546554
}, {
547555
assertion: 'deepEqual',
548556
message: '',
557+
raw: {actual: 'foo', expected: 'bar'},
549558
values: [{label: 'Difference:', formatted: /- 'foo'\n\+ 'bar'/}]
550559
});
551560

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

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

590+
const actual = {a: 'a'};
591+
const expected = {a: 'a'};
580592
failsWith(t, () => {
581-
assertions.notDeepEqual({a: 'a'}, {a: 'a'});
593+
assertions.notDeepEqual(actual, expected);
582594
}, {
595+
actual,
583596
assertion: 'notDeepEqual',
597+
expected,
584598
message: '',
599+
raw: {actual, expected},
585600
values: [{label: 'Value is deeply equal:', formatted: /.*\{.*\n.*a: 'a'/}]
586601
});
587602

0 commit comments

Comments
 (0)