UNPKG

chai-jest-diff

Version:

A plugin to make Chai’s equality assertions (shallow or deep) fail with Jest-like diffs

91 lines (72 loc) 2.87 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = chaiJestDiff; var _jestDiff = require('jest-diff'); var _jestDiff2 = _interopRequireDefault(_jestDiff); var _jestMatcherUtils = require('jest-matcher-utils'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function chaiJestDiff() { var expand = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; return function (_chai, _ref) { var flag = _ref.flag, eql = _ref.eql; var Assertion = _chai.Assertion; var assertEqual = createAssertion({ deepPassAssert: 'eql', expand: expand, flag: flag, kind: 'equal', name: 'assertEqual', passFx: function passFx(a, b) { return a === b; } }); Assertion.addMethod('equal', assertEqual); Assertion.addMethod('equals', assertEqual); Assertion.addMethod('eq', assertEqual); var assertEql = createAssertion({ expand: expand, flag: flag, kind: 'deep equal', name: 'assertEql', passFx: eql }); Assertion.addMethod('eql', assertEql); Assertion.addMethod('eqls', assertEql); }; } function buildMessage(_ref2) { var expected = _ref2.expected, received = _ref2.received, hintParam = _ref2.hintParam, introSuffix = _ref2.introSuffix, showDiff = _ref2.showDiff, expand = _ref2.expand; var diffString = showDiff ? (0, _jestDiff2.default)(expected, received, { expand: expand }) : null; return (0, _jestMatcherUtils.matcherHint)(hintParam) + '\n\n' + ('Expected value ' + introSuffix + ':\n') + (' ' + (0, _jestMatcherUtils.printExpected)(expected) + '\n') + 'Received:\n' + (' ' + (0, _jestMatcherUtils.printReceived)(received)) + (diffString ? '\n\nDifference:\n\n' + diffString : ''); } function createAssertion(_ref3) { var deepPassAssert = _ref3.deepPassAssert, expand = _ref3.expand, flag = _ref3.flag, kind = _ref3.kind, name = _ref3.name, passFx = _ref3.passFx; var result = function syntheticAssert(expected, msg) { if (msg) { flag(this, 'message', msg); } if (deepPassAssert && flag(this, 'deep')) { return this[deepPassAssert](expected); } var received = flag(this, 'object'); var pass = passFx(received, expected); var hintSegment = kind.replace(/\s+/, '.'); var message = pass ? buildMessage({ expected: expected, received: received, hintParam: '.not.to.' + hintSegment, introSuffix: 'not to ' + kind, expand: expand }) : buildMessage({ expected: expected, received: received, hintParam: '.to.' + hintSegment, introSuffix: 'to ' + kind, showDiff: true, expand: expand }); this.assert(pass, message, message, expected, received, false); }; result.displayName = name; return result; }