You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
4.5 KiB
157 lines
4.5 KiB
2 months ago
|
'use strict';
|
||
|
|
||
|
Object.defineProperty(exports, '__esModule', {
|
||
|
value: true
|
||
|
});
|
||
|
exports.default = void 0;
|
||
|
|
||
|
var _chalk = _interopRequireDefault(require('chalk'));
|
||
|
|
||
|
var _jestMatcherUtils = require('jest-matcher-utils');
|
||
|
|
||
|
function _interopRequireDefault(obj) {
|
||
|
return obj && obj.__esModule ? obj : {default: obj};
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||
|
*
|
||
|
* This source code is licensed under the MIT license found in the
|
||
|
* LICENSE file in the root directory of this source tree.
|
||
|
*/
|
||
|
const assertOperatorsMap = {
|
||
|
'!=': 'notEqual',
|
||
|
'!==': 'notStrictEqual',
|
||
|
'==': 'equal',
|
||
|
'===': 'strictEqual'
|
||
|
};
|
||
|
const humanReadableOperators = {
|
||
|
deepEqual: 'to deeply equal',
|
||
|
deepStrictEqual: 'to deeply and strictly equal',
|
||
|
equal: 'to be equal',
|
||
|
notDeepEqual: 'not to deeply equal',
|
||
|
notDeepStrictEqual: 'not to deeply and strictly equal',
|
||
|
notEqual: 'to not be equal',
|
||
|
notStrictEqual: 'not be strictly equal',
|
||
|
strictEqual: 'to strictly be equal'
|
||
|
};
|
||
|
|
||
|
const getOperatorName = (operator, stack) => {
|
||
|
if (typeof operator === 'string') {
|
||
|
return assertOperatorsMap[operator] || operator;
|
||
|
}
|
||
|
|
||
|
if (stack.match('.doesNotThrow')) {
|
||
|
return 'doesNotThrow';
|
||
|
}
|
||
|
|
||
|
if (stack.match('.throws')) {
|
||
|
return 'throws';
|
||
|
} // this fallback is only needed for versions older than node 10
|
||
|
|
||
|
if (stack.match('.fail')) {
|
||
|
return 'fail';
|
||
|
}
|
||
|
|
||
|
return '';
|
||
|
};
|
||
|
|
||
|
const operatorMessage = operator => {
|
||
|
const niceOperatorName = getOperatorName(operator, '');
|
||
|
const humanReadableOperator = humanReadableOperators[niceOperatorName];
|
||
|
return typeof operator === 'string'
|
||
|
? `${humanReadableOperator || niceOperatorName} to:\n`
|
||
|
: '';
|
||
|
};
|
||
|
|
||
|
const assertThrowingMatcherHint = operatorName =>
|
||
|
operatorName
|
||
|
? _chalk.default.dim('assert') +
|
||
|
_chalk.default.dim('.' + operatorName + '(') +
|
||
|
_chalk.default.red('function') +
|
||
|
_chalk.default.dim(')')
|
||
|
: '';
|
||
|
|
||
|
const assertMatcherHint = (operator, operatorName, expected) => {
|
||
|
let message = '';
|
||
|
|
||
|
if (operator === '==' && expected === true) {
|
||
|
message =
|
||
|
_chalk.default.dim('assert') +
|
||
|
_chalk.default.dim('(') +
|
||
|
_chalk.default.red('received') +
|
||
|
_chalk.default.dim(')');
|
||
|
} else if (operatorName) {
|
||
|
message =
|
||
|
_chalk.default.dim('assert') +
|
||
|
_chalk.default.dim('.' + operatorName + '(') +
|
||
|
_chalk.default.red('received') +
|
||
|
_chalk.default.dim(', ') +
|
||
|
_chalk.default.green('expected') +
|
||
|
_chalk.default.dim(')');
|
||
|
}
|
||
|
|
||
|
return message;
|
||
|
};
|
||
|
|
||
|
function assertionErrorMessage(error, options) {
|
||
|
const {expected, actual, generatedMessage, message, operator, stack} = error;
|
||
|
const diffString = (0, _jestMatcherUtils.diff)(expected, actual, options);
|
||
|
const hasCustomMessage = !generatedMessage;
|
||
|
const operatorName = getOperatorName(operator, stack);
|
||
|
const trimmedStack = stack
|
||
|
.replace(message, '')
|
||
|
.replace(/AssertionError(.*)/g, '');
|
||
|
|
||
|
if (operatorName === 'doesNotThrow') {
|
||
|
return (
|
||
|
buildHintString(assertThrowingMatcherHint(operatorName)) +
|
||
|
_chalk.default.reset(`Expected the function not to throw an error.\n`) +
|
||
|
_chalk.default.reset(`Instead, it threw:\n`) +
|
||
|
` ${(0, _jestMatcherUtils.printReceived)(actual)}` +
|
||
|
_chalk.default.reset(
|
||
|
hasCustomMessage ? '\n\nMessage:\n ' + message : ''
|
||
|
) +
|
||
|
trimmedStack
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if (operatorName === 'throws') {
|
||
|
return (
|
||
|
buildHintString(assertThrowingMatcherHint(operatorName)) +
|
||
|
_chalk.default.reset(`Expected the function to throw an error.\n`) +
|
||
|
_chalk.default.reset(`But it didn't throw anything.`) +
|
||
|
_chalk.default.reset(
|
||
|
hasCustomMessage ? '\n\nMessage:\n ' + message : ''
|
||
|
) +
|
||
|
trimmedStack
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if (operatorName === 'fail') {
|
||
|
return (
|
||
|
buildHintString(assertMatcherHint(operator, operatorName, expected)) +
|
||
|
_chalk.default.reset(hasCustomMessage ? 'Message:\n ' + message : '') +
|
||
|
trimmedStack
|
||
|
);
|
||
|
}
|
||
|
|
||
|
return (
|
||
|
buildHintString(assertMatcherHint(operator, operatorName, expected)) +
|
||
|
_chalk.default.reset(`Expected value ${operatorMessage(operator)}`) +
|
||
|
` ${(0, _jestMatcherUtils.printExpected)(expected)}\n` +
|
||
|
_chalk.default.reset(`Received:\n`) +
|
||
|
` ${(0, _jestMatcherUtils.printReceived)(actual)}` +
|
||
|
_chalk.default.reset(hasCustomMessage ? '\n\nMessage:\n ' + message : '') +
|
||
|
(diffString ? `\n\nDifference:\n\n${diffString}` : '') +
|
||
|
trimmedStack
|
||
|
);
|
||
|
}
|
||
|
|
||
|
function buildHintString(hint) {
|
||
|
return hint ? hint + '\n\n' : '';
|
||
|
}
|
||
|
|
||
|
var _default = assertionErrorMessage;
|
||
|
exports.default = _default;
|