Skip to content

Commit 2fc468c

Browse files
authored
expect: Improve report when matcher fails, part 15 (#8281)
* expect: Improve report when matcher fail, part 15 * Update CHANGELOG.md * Rename isShallowInequality, refactor deepEqualityName, edit and move message * Rename toStrictEqualTesters * Separate deepEqualityName from hasConciseReport * Add 2 snapshot tests for date * Update packages/expect/src/matchers.ts Co-Authored-By: pedrottimark <[email protected]> * Update 6 snapshots for improved deep equality message
1 parent dbdb417 commit 2fc468c

File tree

5 files changed

+184
-85
lines changed

5 files changed

+184
-85
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
### Features
44

5+
- `[expect]` Improve report when matcher fails, part 15 ([#8281](https://github.com/facebook/jest/pull/8281))
6+
57
### Fixes
68

79
- `[jest-snapshot]` Inline snapshots: do not indent empty lines ([#8277](https://github.com/facebook/jest/pull/8277))

packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap

Lines changed: 123 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -225,12 +225,7 @@ Received has value: <red>undefined</>"
225225
`;
226226

227227
exports[`.toBe() does not crash on circular references 1`] = `
228-
"<dim>expect(</><red>received</><dim>).toBe(</><green>expected</><dim>) // Object.is equality</>
229-
230-
Expected: <green>{}</>
231-
Received: <red>{\\"circular\\": [Circular]}</>
232-
233-
Difference:
228+
"<dim>expect(</><red>received</><dim>).</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
234229

235230
<green>- Expected</>
236231
<red>+ Received</>
@@ -242,99 +237,137 @@ Difference:
242237
`;
243238

244239
exports[`.toBe() fails for '"a"' with '.not' 1`] = `
245-
"<dim>expect(</><red>received</><dim>).</>not<dim>.toBe(</><green>expected</><dim>) // Object.is equality</>
240+
"<dim>expect(</><red>received</><dim>).</>not<dim>.</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
246241

247-
Expected: <green>\\"a\\"</>
248-
Received: <red>\\"a\\"</>"
242+
Expected: not <green>\\"a\\"</>"
249243
`;
250244

251245
exports[`.toBe() fails for '[]' with '.not' 1`] = `
252-
"<dim>expect(</><red>received</><dim>).</>not<dim>.toBe(</><green>expected</><dim>) // Object.is equality</>
246+
"<dim>expect(</><red>received</><dim>).</>not<dim>.</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
253247

254-
Expected: <green>[]</>
255-
Received: <red>[]</>"
248+
Expected: not <green>[]</>"
256249
`;
257250

258251
exports[`.toBe() fails for '{}' with '.not' 1`] = `
259-
"<dim>expect(</><red>received</><dim>).</>not<dim>.toBe(</><green>expected</><dim>) // Object.is equality</>
252+
"<dim>expect(</><red>received</><dim>).</>not<dim>.</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
260253

261-
Expected: <green>{}</>
262-
Received: <red>{}</>"
254+
Expected: not <green>{}</>"
263255
`;
264256

265257
exports[`.toBe() fails for '1' with '.not' 1`] = `
266-
"<dim>expect(</><red>received</><dim>).</>not<dim>.toBe(</><green>expected</><dim>) // Object.is equality</>
258+
"<dim>expect(</><red>received</><dim>).</>not<dim>.</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
267259

268-
Expected: <green>1</>
269-
Received: <red>1</>"
260+
Expected: not <green>1</>"
270261
`;
271262

272263
exports[`.toBe() fails for 'false' with '.not' 1`] = `
273-
"<dim>expect(</><red>received</><dim>).</>not<dim>.toBe(</><green>expected</><dim>) // Object.is equality</>
264+
"<dim>expect(</><red>received</><dim>).</>not<dim>.</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
274265

275-
Expected: <green>false</>
276-
Received: <red>false</>"
266+
Expected: not <green>false</>"
277267
`;
278268

279269
exports[`.toBe() fails for 'null' with '.not' 1`] = `
280-
"<dim>expect(</><red>received</><dim>).</>not<dim>.toBe(</><green>expected</><dim>) // Object.is equality</>
270+
"<dim>expect(</><red>received</><dim>).</>not<dim>.</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
281271

282-
Expected: <green>null</>
283-
Received: <red>null</>"
272+
Expected: not <green>null</>"
284273
`;
285274

286275
exports[`.toBe() fails for 'undefined' with '.not' 1`] = `
287-
"<dim>expect(</><red>received</><dim>).</>not<dim>.toBe(</><green>expected</><dim>) // Object.is equality</>
276+
"<dim>expect(</><red>received</><dim>).</>not<dim>.</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
288277

289-
Expected: <green>undefined</>
290-
Received: <red>undefined</>"
278+
Expected: not <green>undefined</>"
291279
`;
292280

293281
exports[`.toBe() fails for: "abc" and "cde" 1`] = `
294-
"<dim>expect(</><red>received</><dim>).toBe(</><green>expected</><dim>) // Object.is equality</>
282+
"<dim>expect(</><red>received</><dim>).</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
295283

296284
Expected: <green>\\"cde\\"</>
297285
Received: <red>\\"abc\\"</>"
298286
`;
299287

288+
exports[`.toBe() fails for: "four
289+
4
290+
line
291+
string" and "3
292+
line
293+
string" 1`] = `
294+
"<dim>expect(</><red>received</><dim>).</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
295+
296+
<green>- Expected</>
297+
<red>+ Received</>
298+
299+
<green>- 3</>
300+
<red>+ four</>
301+
<red>+ 4</>
302+
<dim> line</>
303+
<dim> string</>"
304+
`;
305+
300306
exports[`.toBe() fails for: "with
301307
trailing space" and "without trailing space" 1`] = `
302-
"<dim>expect(</><red>received</><dim>).toBe(</><green>expected</><dim>) // Object.is equality</>
308+
"<dim>expect(</><red>received</><dim>).</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
303309

304310
Expected: <green>\\"without trailing space\\"</>
305311
Received: <red>\\"with<inverse> </></>
306312
<red>trailing space\\"</>"
307313
`;
308314

315+
exports[`.toBe() fails for: /received/ and /expected/ 1`] = `
316+
"<dim>expect(</><red>received</><dim>).</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
317+
318+
Expected: <green>/expected/</>
319+
Received: <red>/received/</>"
320+
`;
321+
309322
exports[`.toBe() fails for: [] and [] 1`] = `
310-
"<dim>expect(</><red>received</><dim>).toBe(</><green>expected</><dim>) // Object.is equality</>
323+
"<dim>expect(</><red>received</><dim>).</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
324+
325+
<dim>If it should pass with deep equality, replace \\"toBe\\" with \\"toStrictEqual\\"</>
311326

312327
Expected: <green>[]</>
313-
Received: <red>[]</>
328+
Received value has no visual difference"
329+
`;
314330

315-
Difference:
331+
exports[`.toBe() fails for: [Error: received] and [Error: expected] 1`] = `
332+
"<dim>expect(</><red>received</><dim>).</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
316333

317-
<dim>Compared values have no visual difference.</> <dim>Note that you are testing for equality with the stricter \`toBe\` matcher using \`Object.is\`. For deep equality only, use \`toEqual\` instead.</>"
334+
Expected: <green>[Error: expected]</>
335+
Received: <red>[Error: received]</>"
318336
`;
319337

320-
exports[`.toBe() fails for: {"a": 1} and {"a": 1} 1`] = `
321-
"<dim>expect(</><red>received</><dim>).toBe(</><green>expected</><dim>) // Object.is equality</>
338+
exports[`.toBe() fails for: [Function anonymous] and [Function anonymous] 1`] = `
339+
"<dim>expect(</><red>received</><dim>).</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
322340

323-
Expected: <green>{\\"a\\": 1}</>
324-
Received: <red>{\\"a\\": 1}</>
341+
Expected: <green>[Function anonymous]</>
342+
Received value has no visual difference"
343+
`;
325344

326-
Difference:
345+
exports[`.toBe() fails for: {"a": [Function a], "b": 2} and {"a": Any<Function>, "b": 2} 1`] = `
346+
"<dim>expect(</><red>received</><dim>).</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
347+
348+
<dim>If it should pass with deep equality, replace \\"toBe\\" with \\"toStrictEqual\\"</>
327349

328-
<dim>Compared values have no visual difference.</> <dim>Note that you are testing for equality with the stricter \`toBe\` matcher using \`Object.is\`. For deep equality only, use \`toEqual\` instead.</>"
350+
<green>- Expected</>
351+
<red>+ Received</>
352+
353+
<dim> Object {</>
354+
<green>- \\"a\\": Any<Function>,</>
355+
<red>+ \\"a\\": [Function a],</>
356+
<dim> \\"b\\": 2,</>
357+
<dim> }</>"
329358
`;
330359

331-
exports[`.toBe() fails for: {"a": 1} and {"a": 5} 1`] = `
332-
"<dim>expect(</><red>received</><dim>).toBe(</><green>expected</><dim>) // Object.is equality</>
360+
exports[`.toBe() fails for: {"a": 1} and {"a": 1} 1`] = `
361+
"<dim>expect(</><red>received</><dim>).</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
333362

334-
Expected: <green>{\\"a\\": 5}</>
335-
Received: <red>{\\"a\\": 1}</>
363+
<dim>If it should pass with deep equality, replace \\"toBe\\" with \\"toStrictEqual\\"</>
336364

337-
Difference:
365+
Expected: <green>{\\"a\\": 1}</>
366+
Received value has no visual difference"
367+
`;
368+
369+
exports[`.toBe() fails for: {"a": 1} and {"a": 5} 1`] = `
370+
"<dim>expect(</><red>received</><dim>).</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
338371

339372
<green>- Expected</>
340373
<red>+ Received</>
@@ -345,44 +378,75 @@ Difference:
345378
<dim> }</>"
346379
`;
347380

348-
exports[`.toBe() fails for: {} and {} 1`] = `
349-
"<dim>expect(</><red>received</><dim>).toBe(</><green>expected</><dim>) // Object.is equality</>
381+
exports[`.toBe() fails for: {"a": undefined, "b": 2} and {"b": 2} 1`] = `
382+
"<dim>expect(</><red>received</><dim>).</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
350383

351-
Expected: <green>{}</>
352-
Received: <red>{}</>
384+
<dim>If it should pass with deep equality, replace \\"toBe\\" with \\"toEqual\\"</>
353385

354-
Difference:
386+
<green>- Expected</>
387+
<red>+ Received</>
388+
389+
<dim> Object {</>
390+
<red>+ \\"a\\": undefined,</>
391+
<dim> \\"b\\": 2,</>
392+
<dim> }</>"
393+
`;
355394

356-
<dim>Compared values have no visual difference.</> <dim>Note that you are testing for equality with the stricter \`toBe\` matcher using \`Object.is\`. For deep equality only, use \`toEqual\` instead.</>"
395+
exports[`.toBe() fails for: {} and {} 1`] = `
396+
"<dim>expect(</><red>received</><dim>).</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
397+
398+
<dim>If it should pass with deep equality, replace \\"toBe\\" with \\"toStrictEqual\\"</>
399+
400+
Expected: <green>{}</>
401+
Received value has no visual difference"
357402
`;
358403

359404
exports[`.toBe() fails for: -0 and 0 1`] = `
360-
"<dim>expect(</><red>received</><dim>).toBe(</><green>expected</><dim>) // Object.is equality</>
405+
"<dim>expect(</><red>received</><dim>).</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
361406

362407
Expected: <green>0</>
363408
Received: <red>-0</>"
364409
`;
365410

366411
exports[`.toBe() fails for: 1 and 2 1`] = `
367-
"<dim>expect(</><red>received</><dim>).toBe(</><green>expected</><dim>) // Object.is equality</>
412+
"<dim>expect(</><red>received</><dim>).</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
368413

369414
Expected: <green>2</>
370415
Received: <red>1</>"
371416
`;
372417

373-
exports[`.toBe() fails for: null and undefined 1`] = `
374-
"<dim>expect(</><red>received</><dim>).toBe(</><green>expected</><dim>) // Object.is equality</>
418+
exports[`.toBe() fails for: 2020-02-20T00:00:00.000Z and 2020-02-20T00:00:00.000Z 1`] = `
419+
"<dim>expect(</><red>received</><dim>).</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
375420

376-
Expected: <green>undefined</>
377-
Received: <red>null</>
421+
<dim>If it should pass with deep equality, replace \\"toBe\\" with \\"toStrictEqual\\"</>
378422

379-
Difference:
423+
Expected: <green>2020-02-20T00:00:00.000Z</>
424+
Received value has no visual difference"
425+
`;
426+
427+
exports[`.toBe() fails for: 2020-02-21T00:00:00.000Z and 2020-02-20T00:00:00.000Z 1`] = `
428+
"<dim>expect(</><red>received</><dim>).</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
380429

381-
Comparing two different types of values. Expected <green>undefined</> but received <red>null</>."
430+
Expected: <green>2020-02-20T00:00:00.000Z</>
431+
Received: <red>2020-02-21T00:00:00.000Z</>"
432+
`;
433+
434+
exports[`.toBe() fails for: Symbol(received) and Symbol(expected) 1`] = `
435+
"<dim>expect(</><red>received</><dim>).</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
436+
437+
Expected: <green>Symbol(expected)</>
438+
Received: <red>Symbol(received)</>"
439+
`;
440+
441+
exports[`.toBe() fails for: null and undefined 1`] = `
442+
"<dim>expect(</><red>received</><dim>).</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
443+
444+
Expected: <green>undefined</>
445+
Received: <red>null</>"
382446
`;
383447

384448
exports[`.toBe() fails for: true and false 1`] = `
385-
"<dim>expect(</><red>received</><dim>).toBe(</><green>expected</><dim>) // Object.is equality</>
449+
"<dim>expect(</><red>received</><dim>).</>toBe<dim>(</><green>expected</><dim>) // Object.is equality</>
386450

387451
Expected: <green>false</>
388452
Received: <red>true</>"

packages/expect/src/__tests__/matchers.test.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,11 +203,20 @@ describe('.toBe()', () => {
203203
[
204204
[1, 2],
205205
[true, false],
206+
[() => {}, () => {}],
206207
[{}, {}],
207208
[{a: 1}, {a: 1}],
208209
[{a: 1}, {a: 5}],
210+
[{a: () => {}, b: 2}, {a: expect.any(Function), b: 2}],
211+
[{a: undefined, b: 2}, {b: 2}],
212+
[new Date('2020-02-20'), new Date('2020-02-20')],
213+
[new Date('2020-02-21'), new Date('2020-02-20')],
214+
[/received/, /expected/],
215+
[Symbol('received'), Symbol('expected')],
216+
[new Error('received'), new Error('expected')],
209217
['abc', 'cde'],
210218
['with \ntrailing space', 'without trailing space'],
219+
['four\n4\nline\nstring', '3\nline\nstring'],
211220
[[], []],
212221
[null, undefined],
213222
[-0, +0],

0 commit comments

Comments
 (0)