@samitouri / QOS-React-2 / commits / d0e75dcfe2

Improve toWarnDev matcher DX for unexpected warnings (#12082)

Use jest-diff to format the warnings in a way that makes it easier to spot the differences.

Brian Vaughn committed Jan 23, 2018 at 14:46 UTC d0e75dcfe2343bd04055c8cbac2bd351f2f5c16e
3 files changed +36 -7
package.json
+1
@@ -70,6 +70,7 @@
70 "gzip-size": "^3.0.0",
71 "jasmine-check": "^1.0.0-rc.0",
72 "jest": "^22.0.6",
73 + "jest-diff": "^22.1.0",
74 "merge-stream": "^1.0.0",
75 "minimatch": "^3.0.4",
76 "minimist": "^1.2.0",
scripts/jest/matchers/toWarnDev.js
+15 -7
@@ -1,5 +1,7 @@
1 'use strict';
2
3 +const jestDiff = require('jest-diff');
4 +
5 function normalizeCodeLocInfo(str) {
6 return str && str.replace(/at .+?:\d+/g, 'at **');
7 }
@@ -39,13 +41,19 @@ const createMatcherFor = consoleMethod =>
41 }
42 }
43
42 - let errorMessage = `Unexpected warning recorded:\n${this.utils.printReceived(
43 - message
44 - )}`;
45 - if (expectedMessages.length > 0) {
46 - errorMessage += `\n\nThe following expected warnings were not yet seen:\n${expectedMessages
47 - .map(unformatted => this.utils.printExpected(unformatted))
48 - .join('\n')}`;
44 + let errorMessage;
45 + if (expectedMessages.length === 0) {
46 + errorMessage =
47 + 'Unexpected warning recorded: ' +
48 + this.utils.printReceived(normalizedMessage);
49 + } else if (expectedMessages.length === 1) {
50 + errorMessage =
51 + 'Unexpected warning recorded: ' +
52 + jestDiff(normalizedMessage, expectedMessages[0]);
53 + } else {
54 + errorMessage =
55 + 'Unexpected warning recorded: ' +
56 + jestDiff([normalizedMessage], expectedMessages);
57 }
58
59 // Record the call stack for unexpected warnings.
yarn.lock
+20
@@ -3213,6 +3213,15 @@ jest-diff@^22.0.6:
3213 jest-get-type "^22.0.6"
3214 pretty-format "^22.0.6"
3215
3216 +jest-diff@^22.1.0:
3217 + version "22.1.0"
3218 + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.1.0.tgz#0fad9d96c87b453896bf939df3dc8aac6919ac38"
3219 + dependencies:
3220 + chalk "^2.0.1"
3221 + diff "^3.2.0"
3222 + jest-get-type "^22.1.0"
3223 + pretty-format "^22.1.0"
3224 +
3225 jest-docblock@^22.0.6:
3226 version "22.0.6"
3227 resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.0.6.tgz#f187fb2c67eec0999e569d563092125283084f9e"
@@ -3238,6 +3247,10 @@ jest-get-type@^22.0.6:
3247 version "22.0.6"
3248 resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.0.6.tgz#301fbc0760779fdbad37b6e3239a3c1811aa75cb"
3249
3250 +jest-get-type@^22.1.0:
3251 + version "22.1.0"
3252 + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.1.0.tgz#4e90af298ed6181edc85d2da500dbd2753e0d5a9"
3253 +
3254 jest-haste-map@^22.0.6:
3255 version "22.0.6"
3256 resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.0.6.tgz#198d665f65e1c484fef106a3c970c5b47903647e"
@@ -4273,6 +4286,13 @@ pretty-format@^22.0.6:
4286 ansi-regex "^3.0.0"
4287 ansi-styles "^3.2.0"
4288
4289 +pretty-format@^22.1.0:
4290 + version "22.1.0"
4291 + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.1.0.tgz#2277605b40ed4529ae4db51ff62f4be817647914"
4292 + dependencies:
4293 + ansi-regex "^3.0.0"
4294 + ansi-styles "^3.2.0"
4295 +
4296 private@^0.1.6, private@~0.1.5:
4297 version "0.1.7"
4298 resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1"