Skip to content

Commit 526c00c

Browse files
ortacpojer
authored andcommitted
Improves the terse messages in jest-editor (jestjs#3615)
* Improves the terse messages in jest-editor * Adds a note about wording for jest-editor inside a test that matches the error it is implicity relying on * Adds a note about wording for jest-editor inside a test that matches the error it is implicity relying on
1 parent a0ae458 commit 526c00c

File tree

7 files changed

+71
-13
lines changed

7 files changed

+71
-13
lines changed

.vscode/settings.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"jest.pathToJest": "npm run jest --",
2+
"jest.pathToJest": "yarn jest --",
33
"editor.rulers": [
44
80
55
],
@@ -12,5 +12,6 @@
1212
"prettier.printWidth": 80,
1313
"prettier.singleQuote": true,
1414
"prettier.trailingComma": "all",
15-
"prettier.semi": true
15+
"prettier.semi": true,
16+
"editor.formatOnSave": true
1617
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"numFailedTestSuites":1,"numFailedTests":7,"numPassedTestSuites":5,"numPassedTests":8,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTotalTestSuites":6,"numTotalTests":15,"snapshot":{"added":0,"didUpdate":false,"failure":true,"filesAdded":0,"filesRemoved":0,"filesUnmatched":1,"filesUpdated":0,"matched":5,"total":6,"unchecked":0,"unmatched":1,"updated":0},"startTime":1495204247174,"success":false,"testResults":[{"assertionResults":[{"failureMessages":["Error: expect(received).toEqual(expected)\n\nExpected value to equal:\n 2\nReceived:\n 1\n at Object.<anonymous>.it (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/src/_tests/example.test.ts:3:13)\n at Object.asyncFn (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/jasmine-async.js:68:30)\n at resolve (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/queueRunner.js:38:12)\n at tryCallTwo (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:45:5)\n at doResolve (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:200:13)\n at new Promise (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:66:3)\n at mapper (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/queueRunner.js:31:21)\n at Promise.resolve.then.el (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/p-map/index.js:42:16)\n at tryCallOne (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:37:12)\n at /Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:123:15"],"status":"failed","title":"numbers"},{"failureMessages":["Error: expect(received).toEqual(expected)\n\nExpected value to equal:\n 2\nReceived:\n \"1\"\n\nDifference:\n\n Comparing two different types of values. Expected number but received string.\n at Object.<anonymous>.it (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/src/_tests/example.test.ts:7:15)\n at Object.asyncFn (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/jasmine-async.js:68:30)\n at resolve (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/queueRunner.js:38:12)\n at tryCallTwo (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:45:5)\n at doResolve (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:200:13)\n at new Promise (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:66:3)\n at mapper (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/queueRunner.js:31:21)\n at Promise.resolve.then.el (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/p-map/index.js:42:16)\n at tryCallOne (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:37:12)\n at /Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:123:15"],"status":"failed","title":"string to numbers: numbers"},{"failureMessages":["Error: expect(received).toEqual(expected)\n\nExpected value to equal:\n {\"a\": 2}\nReceived:\n {}\n\nDifference:\n\n- Expected\n+ Received\n\n-Object {\n- \"a\": 2,\n-}\n+Object {}\n at Object.<anonymous>.it (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/src/_tests/example.test.ts:11:14)\n at Object.asyncFn (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/jasmine-async.js:68:30)\n at resolve (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/queueRunner.js:38:12)\n at tryCallTwo (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:45:5)\n at doResolve (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:200:13)\n at new Promise (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:66:3)\n at mapper (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/queueRunner.js:31:21)\n at Promise.resolve.then.el (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/p-map/index.js:42:16)\n at tryCallOne (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:37:12)\n at /Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:123:15"],"status":"failed","title":"objects"},{"failureMessages":["Error: expect(value).toMatchSnapshot()\n\nReceived value does not match stored snapshot 1.\n\n- Snapshot\n+ Received\n\nObject {\n- \"asd\": 3,\n+ \"asd\": 2,\n }\n at Object.<anonymous>.it (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/src/_tests/example.test.ts:15:20)\n at Object.asyncFn (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/jasmine-async.js:68:30)\n at resolve (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/queueRunner.js:38:12)\n at tryCallTwo (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:45:5)\n at doResolve (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:200:13)\n at new Promise (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:66:3)\n at mapper (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/queueRunner.js:31:21)\n at Promise.resolve.then.el (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/p-map/index.js:42:16)\n at tryCallOne (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:37:12)\n at /Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:123:15"],"status":"failed","title":"snapshots"},{"failureMessages":[],"status":"passed","title":"making snapshot"},{"failureMessages":["Error: expect(received).toBeGreaterThan(expected)\n\nExpected value to be greater than:\n 3\nReceived:\n 2\n at Object.<anonymous>.it (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/src/_tests/example.test.ts:23:13)\n at Object.asyncFn (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/jasmine-async.js:68:30)\n at resolve (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/queueRunner.js:38:12)\n at tryCallTwo (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:45:5)\n at doResolve (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:200:13)\n at new Promise (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:66:3)\n at mapper (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/queueRunner.js:31:21)\n at Promise.resolve.then.el (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/p-map/index.js:42:16)\n at tryCallOne (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:37:12)\n at /Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:123:15"],"status":"failed","title":"greater than"},{"failureMessages":["Error: expect(received).toBeFalsy()\n\nExpected value to be falsy, instead received\n 2\n at Object.<anonymous>.it (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/src/_tests/example.test.ts:27:13)\n at Object.asyncFn (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/jasmine-async.js:68:30)\n at resolve (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/queueRunner.js:38:12)\n at tryCallTwo (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:45:5)\n at doResolve (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:200:13)\n at new Promise (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:66:3)\n at mapper (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/queueRunner.js:31:21)\n at Promise.resolve.then.el (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/p-map/index.js:42:16)\n at tryCallOne (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:37:12)\n at /Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:123:15"],"status":"failed","title":"falsy"},{"failureMessages":["Error: expect(received).toBeTruthy()\n\nExpected value to be truthy, instead received\n null\n at Object.<anonymous>.it (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/src/_tests/example.test.ts:31:16)\n at Object.asyncFn (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/jasmine-async.js:68:30)\n at resolve (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/queueRunner.js:38:12)\n at tryCallTwo (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:45:5)\n at doResolve (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:200:13)\n at new Promise (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:66:3)\n at mapper (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/jest-jasmine2/build/queueRunner.js:31:21)\n at Promise.resolve.then.el (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/p-map/index.js:42:16)\n at tryCallOne (/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:37:12)\n at /Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/node_modules/promise/lib/core.js:123:15"],"status":"failed","title":"truthy"}],"endTime":1495204249679,"message":" ● numbers\n\n expect(received).toEqual(expected)\n \n Expected value to equal:\n 2\n Received:\n 1\n \n at Object.<anonymous>.it (src/_tests/example.test.ts:3:13)\n\n ● string to numbers: numbers\n\n expect(received).toEqual(expected)\n \n Expected value to equal:\n 2\n Received:\n \"1\"\n \n Difference:\n \n Comparing two different types of values. Expected number but received string.\n \n at Object.<anonymous>.it (src/_tests/example.test.ts:7:15)\n\n ● objects\n\n expect(received).toEqual(expected)\n \n Expected value to equal:\n {\"a\": 2}\n Received:\n {}\n \n Difference:\n \n - Expected\n + Received\n \n -Object {\n - \"a\": 2,\n -}\n +Object {}\n \n at Object.<anonymous>.it (src/_tests/example.test.ts:11:14)\n\n ● snapshots\n\n expect(value).toMatchSnapshot()\n \n Received value does not match stored snapshot 1.\n \n - Snapshot\n + Received\n \n Object {\n - \"asd\": 3,\n + \"asd\": 2,\n }\n \n at Object.<anonymous>.it (src/_tests/example.test.ts:15:20)\n\n ● greater than\n\n expect(received).toBeGreaterThan(expected)\n \n Expected value to be greater than:\n 3\n Received:\n 2\n \n at Object.<anonymous>.it (src/_tests/example.test.ts:23:13)\n\n ● falsy\n\n expect(received).toBeFalsy()\n \n Expected value to be falsy, instead received\n 2\n \n at Object.<anonymous>.it (src/_tests/example.test.ts:27:13)\n\n ● truthy\n\n expect(received).toBeTruthy()\n \n Expected value to be truthy, instead received\n null\n \n at Object.<anonymous>.it (src/_tests/example.test.ts:31:16)\n","name":"/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/src/_tests/example.test.ts","startTime":1495204247355,"status":"failed","summary":""},{"assertionResults":[{"failureMessages":[],"status":"passed","title":"handles some simple JSX"}],"endTime":1495204250922,"message":"","name":"/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/src/_tests/render.test.tsx","startTime":1495204249689,"status":"passed","summary":""},{"assertionResults":[{"failureMessages":[],"status":"passed","title":"generates the width for a simple component"}],"endTime":1495204251093,"message":"","name":"/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/src/_tests/_component-to-node.test.ts","startTime":1495204250950,"status":"passed","summary":""},{"assertionResults":[{"failureMessages":[],"status":"passed","title":"wraps whatever text you pass into it with an SVG schema"}],"endTime":1495204251200,"message":"","name":"/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/src/_tests/_tree-to-svg.test.ts","startTime":1495204251099,"status":"passed","summary":""},{"assertionResults":[{"failureMessages":[],"status":"passed","title":"wraps whatever text you pass into it with an SVG schema"},{"failureMessages":[],"status":"passed","title":"Calls nodeToSVG for it's first node"},{"failureMessages":[],"status":"passed","title":"Calls nodeToSVG for it's children nodes"}],"endTime":1495204251312,"message":"","name":"/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/src/_tests/_tree-to-svg-sub-funcs.test.ts","startTime":1495204251206,"status":"passed","summary":""},{"assertionResults":[{"failureMessages":[],"status":"passed","title":"handles a simple square"}],"endTime":1495204251434,"message":"","name":"/Users/orta/dev/projects/artsy/js/libs/jest-snapshots-svg/src/_tests/_node-to-svg.test.ts","startTime":1495204251318,"status":"passed","summary":""}],"wasInterrupted":false}

integration_tests/__tests__/toMatchSnapshot-test.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,13 @@ test('basic support', () => {
3838
expect(status).toBe(0);
3939
}
4040

41+
// This test below also covers how jest-editor-support creates terse messages
42+
// for letting a Snapshot update, so if the wording is updated, please edit
43+
// /packages/jest-editor-support/src/TestReconciler.js
4144
{
42-
writeFiles(TESTS_DIR, {[filename]: template(['{apple: "updated value"}'])});
45+
writeFiles(TESTS_DIR, {
46+
[filename]: template(['{apple: "updated value"}']),
47+
});
4348
const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]);
4449
expect(stderr).toMatch('Received value does not match stored snapshot');
4550
expect(status).toBe(1);
@@ -65,7 +70,9 @@ test('error thrown before snapshot', () => {
6570
});`);
6671

6772
{
68-
writeFiles(TESTS_DIR, {[filename]: template(['true', '{a: "original"}'])});
73+
writeFiles(TESTS_DIR, {
74+
[filename]: template(['true', '{a: "original"}']),
75+
});
6976
const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]);
7077
expect(stderr).toMatch('1 snapshot written in 1 test suite.');
7178
expect(status).toBe(0);
@@ -78,7 +85,9 @@ test('error thrown before snapshot', () => {
7885
}
7986

8087
{
81-
writeFiles(TESTS_DIR, {[filename]: template(['false', '{a: "original"}'])});
88+
writeFiles(TESTS_DIR, {
89+
[filename]: template(['false', '{a: "original"}']),
90+
});
8291
const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false', filename]);
8392
expect(stderr).not.toMatch('1 obsolete snapshot found');
8493
expect(status).toBe(1);

packages/jest-editor-support/src/Settings.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ module.exports = class Settings extends EventEmitter {
5656
}
5757

5858
getConfig(completed: any) {
59-
this.getConfigProcess = this._createProcess(this.workspace, ['--showConfig']);
59+
this.getConfigProcess = this._createProcess(this.workspace, [
60+
'--showConfig',
61+
]);
6062

6163
this.getConfigProcess.stdout.on('data', (data: Buffer) => {
6264
const {config, version} = JSON.parse(data.toString());
@@ -68,7 +70,7 @@ module.exports = class Settings extends EventEmitter {
6870
this.settings = config;
6971
});
7072

71-
// They could have an older build of Jest which
73+
// They could have an older build of Jest which
7274
// would error with `--showConfig`
7375
this.getConfigProcess.on('close', () => {
7476
completed();

packages/jest-editor-support/src/TestReconciler.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,21 @@ module.exports = class TestReconciler {
108108

109109
// Do everything we can to try make a one-liner from the error report
110110
sanitizeShortErrorMessage(string: string): string {
111+
if (string.includes('does not match stored snapshot')) {
112+
return 'Snapshot has changed';
113+
}
114+
115+
if (string.includes('New snapshot was not written')) {
116+
return 'New snapshot is ready to write';
117+
}
118+
111119
return string
112120
.split('\n')
113121
.splice(2)
114122
.join('')
115-
.replace(' ', ' ')
116-
.replace('Received:', ' Received:')
117-
.replace('Difference:', ' Difference:');
123+
.replace(/\s\s+/g, ' ')
124+
.replace('Received:', ', Received:')
125+
.split('Difference:')[0];
118126
}
119127

120128
// Pull the line out from the stack trace

packages/jest-editor-support/src/__tests__/Settings-test.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,7 @@ describe('Settings', () => {
4747
it('calls callback even if no data is sent', () => {
4848
const workspace = new ProjectWorkspace('root_path', 'path_to_jest');
4949
const completed = jest.fn();
50-
const config = {cacheDirectory: '/tmp/jest', name: '[md5 hash]'};
51-
50+
5251
const mockProcess: any = new EventEmitter();
5352
mockProcess.stdout = new EventEmitter();
5453
const createProcess = () => mockProcess;
@@ -59,7 +58,6 @@ describe('Settings', () => {
5958

6059
expect(completed).toHaveBeenCalled();
6160
});
62-
6361
});
6462

6563
const makeBuffer = (content: string) => {

packages/jest-editor-support/src/__tests__/TestReconciler-test.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,42 @@ Expected value to be falsy, instead received
5252
});
5353
});
5454
});
55+
56+
describe('Terse Messages', () => {
57+
it('handles shrinking a snapshot message', () => {
58+
const parser = reconcilerWithFile('failing_expects.json');
59+
const file =
60+
'/Users/orta/dev/projects/artsy/js/' +
61+
'libs/jest-snapshots-svg/src/_tests/example.test.ts';
62+
63+
const terseForTest = name => parser.stateForTestAssertion(file, name);
64+
65+
let message = 'Expected value to equal: 2, Received: 1';
66+
let testName = 'numbers';
67+
expect(terseForTest(testName).terseMessage).toEqual(message);
68+
69+
message = 'Expected value to equal: 2, Received: "1"';
70+
testName = 'string to numbers: numbers';
71+
expect(terseForTest(testName).terseMessage).toEqual(message);
72+
73+
message = 'Expected value to equal: {"a": 2}, Received: {}';
74+
testName = 'objects';
75+
expect(terseForTest(testName).terseMessage).toEqual(message);
76+
77+
message = 'Snapshot has changed';
78+
testName = 'snapshots';
79+
expect(terseForTest(testName).terseMessage).toEqual(message);
80+
81+
message = 'Expected value to be greater than: 3, Received: 2';
82+
testName = 'greater than';
83+
expect(terseForTest(testName).terseMessage).toEqual(message);
84+
85+
message = 'Expected value to be falsy, instead received 2';
86+
testName = 'falsy';
87+
expect(terseForTest(testName).terseMessage).toEqual(message);
88+
89+
message = 'Expected value to be truthy, instead received null';
90+
testName = 'truthy';
91+
expect(terseForTest(testName).terseMessage).toEqual(message);
92+
});
93+
});

0 commit comments

Comments
 (0)