UNPKG

4.6 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', {
4 value: true
5});
6exports.default = void 0;
7
8var _chalk = _interopRequireDefault(require('chalk'));
9
10var _jestMatcherUtils = require('jest-matcher-utils');
11
12function _interopRequireDefault(obj) {
13 return obj && obj.__esModule ? obj : {default: obj};
14}
15
16/**
17 * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
18 *
19 * This source code is licensed under the MIT license found in the
20 * LICENSE file in the root directory of this source tree.
21 */
22const assertOperatorsMap = {
23 '!=': 'notEqual',
24 '!==': 'notStrictEqual',
25 '==': 'equal',
26 '===': 'strictEqual'
27};
28const humanReadableOperators = {
29 deepEqual: 'to deeply equal',
30 deepStrictEqual: 'to deeply and strictly equal',
31 equal: 'to be equal',
32 notDeepEqual: 'not to deeply equal',
33 notDeepStrictEqual: 'not to deeply and strictly equal',
34 notEqual: 'to not be equal',
35 notStrictEqual: 'not be strictly equal',
36 strictEqual: 'to strictly be equal'
37};
38
39const getOperatorName = (operator, stack) => {
40 if (typeof operator === 'string') {
41 return assertOperatorsMap[operator] || operator;
42 }
43
44 if (stack.match('.doesNotThrow')) {
45 return 'doesNotThrow';
46 }
47
48 if (stack.match('.throws')) {
49 return 'throws';
50 } // this fallback is only needed for versions older than node 10
51
52 if (stack.match('.fail')) {
53 return 'fail';
54 }
55
56 return '';
57};
58
59const operatorMessage = operator => {
60 const niceOperatorName = getOperatorName(operator, '');
61 const humanReadableOperator = humanReadableOperators[niceOperatorName];
62 return typeof operator === 'string'
63 ? `${humanReadableOperator || niceOperatorName} to:\n`
64 : '';
65};
66
67const assertThrowingMatcherHint = operatorName =>
68 operatorName
69 ? _chalk.default.dim('assert') +
70 _chalk.default.dim('.' + operatorName + '(') +
71 _chalk.default.red('function') +
72 _chalk.default.dim(')')
73 : '';
74
75const assertMatcherHint = (operator, operatorName, expected) => {
76 let message = '';
77
78 if (operator === '==' && expected === true) {
79 message =
80 _chalk.default.dim('assert') +
81 _chalk.default.dim('(') +
82 _chalk.default.red('received') +
83 _chalk.default.dim(')');
84 } else if (operatorName) {
85 message =
86 _chalk.default.dim('assert') +
87 _chalk.default.dim('.' + operatorName + '(') +
88 _chalk.default.red('received') +
89 _chalk.default.dim(', ') +
90 _chalk.default.green('expected') +
91 _chalk.default.dim(')');
92 }
93
94 return message;
95};
96
97function assertionErrorMessage(error, options) {
98 const {expected, actual, generatedMessage, message, operator, stack} = error;
99 const diffString = (0, _jestMatcherUtils.diff)(expected, actual, options);
100 const hasCustomMessage = !generatedMessage;
101 const operatorName = getOperatorName(operator, stack);
102 const trimmedStack = stack
103 .replace(message, '')
104 .replace(/AssertionError(.*)/g, '');
105
106 if (operatorName === 'doesNotThrow') {
107 return (
108 buildHintString(assertThrowingMatcherHint(operatorName)) +
109 _chalk.default.reset(`Expected the function not to throw an error.\n`) +
110 _chalk.default.reset(`Instead, it threw:\n`) +
111 ` ${(0, _jestMatcherUtils.printReceived)(actual)}` +
112 _chalk.default.reset(
113 hasCustomMessage ? '\n\nMessage:\n ' + message : ''
114 ) +
115 trimmedStack
116 );
117 }
118
119 if (operatorName === 'throws') {
120 return (
121 buildHintString(assertThrowingMatcherHint(operatorName)) +
122 _chalk.default.reset(`Expected the function to throw an error.\n`) +
123 _chalk.default.reset(`But it didn't throw anything.`) +
124 _chalk.default.reset(
125 hasCustomMessage ? '\n\nMessage:\n ' + message : ''
126 ) +
127 trimmedStack
128 );
129 }
130
131 if (operatorName === 'fail') {
132 return (
133 buildHintString(assertMatcherHint(operator, operatorName, expected)) +
134 _chalk.default.reset(hasCustomMessage ? 'Message:\n ' + message : '') +
135 trimmedStack
136 );
137 }
138
139 return (
140 buildHintString(assertMatcherHint(operator, operatorName, expected)) +
141 _chalk.default.reset(`Expected value ${operatorMessage(operator)}`) +
142 ` ${(0, _jestMatcherUtils.printExpected)(expected)}\n` +
143 _chalk.default.reset(`Received:\n`) +
144 ` ${(0, _jestMatcherUtils.printReceived)(actual)}` +
145 _chalk.default.reset(hasCustomMessage ? '\n\nMessage:\n ' + message : '') +
146 (diffString ? `\n\nDifference:\n\n${diffString}` : '') +
147 trimmedStack
148 );
149}
150
151function buildHintString(hint) {
152 return hint ? hint + '\n\n' : '';
153}
154
155var _default = assertionErrorMessage;
156exports.default = _default;