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"