Skip to content

Commit c41b2af

Browse files
Lifeusernovemberborn
authored andcommitted
Provide feedback when t.is() values are deeply equal but not the same
t.is() checks if values are exactly the same, and shows a diff otherwise. However if values are deeply equal the diff is misleading. Detect this and provide appropriate feedback to the user. Fixes #1553
1 parent 1cd3a04 commit c41b2af

File tree

2 files changed

+32
-12
lines changed

2 files changed

+32
-12
lines changed

lib/assert.js

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,25 @@ function wrapAssertions(callbacks) {
8787
if (Object.is(actual, expected)) {
8888
pass(this);
8989
} else {
90-
const actualDescriptor = concordance.describe(actual, concordanceOptions);
91-
const expectedDescriptor = concordance.describe(expected, concordanceOptions);
92-
fail(this, new AssertionError({
93-
assertion: 'is',
94-
message,
95-
raw: {actual, expected},
96-
values: [formatDescriptorDiff(actualDescriptor, expectedDescriptor)]
97-
}));
90+
const result = concordance.compare(actual, expected, concordanceOptions);
91+
const actualDescriptor = result.actual || concordance.describe(actual, concordanceOptions);
92+
const expectedDescriptor = result.expected || concordance.describe(expected, concordanceOptions);
93+
94+
if (result.pass) {
95+
fail(this, new AssertionError({
96+
assertion: 'is',
97+
message,
98+
raw: {actual, expected},
99+
values: [formatDescriptorWithLabel('Values are deeply equal to each other, but they are not the same:', actualDescriptor)]
100+
}));
101+
} else {
102+
fail(this, new AssertionError({
103+
assertion: 'is',
104+
message,
105+
raw: {actual, expected},
106+
values: [formatDescriptorDiff(actualDescriptor, expectedDescriptor)]
107+
}));
108+
}
98109
}
99110
},
100111

test/assert.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -213,10 +213,6 @@ test('.is()', t => {
213213
assertions.is(undefined, false);
214214
});
215215

216-
fails(t, () => {
217-
assertions.is({foo: 'bar'}, {foo: 'bar'});
218-
});
219-
220216
fails(t, () => {
221217
// eslint-disable-next-line no-new-wrappers
222218
assertions.is(new String('foo'), new String('foo'));
@@ -234,6 +230,19 @@ test('.is()', t => {
234230
assertions.is('foo', NaN);
235231
});
236232

233+
failsWith(t, () => {
234+
assertions.is({foo: 'bar'}, {foo: 'bar'});
235+
}, {
236+
assertion: 'is',
237+
message: '',
238+
actual: {foo: 'bar'},
239+
expected: {foo: 'bar'},
240+
values: [{
241+
label: `Values are deeply equal to each other, but they are not the same:`,
242+
formatted: /foo/
243+
}]
244+
});
245+
237246
failsWith(t, () => {
238247
assertions.is('foo', 'bar');
239248
}, {

0 commit comments

Comments
 (0)