UNPKG

testdouble

Version:

A minimal test double library for TDD with JavaScript

57 lines (51 loc) 1.75 kB
import _ from '../../wrap/lodash' import create from '../create' import isMatcher from '../is-matcher' export default create({ name: 'contains', matches (containings, actualArg) { if (containings.length === 0) return false return _.every(containings, (containing) => argumentContains(containing, actualArg) ) } }) const argumentContains = function (containing, actualArg) { if (_.isArray(containing)) { return _.some(actualArg, actualElement => _.isEqualWith(containing, actualElement, equalish)) } else { return _.isEqualWith(containing, actualArg, equalish) } } const equalish = function (containing, actualArg) { if (_.isRegExp(containing)) { if (_.isString(actualArg)) { return containing.test(actualArg) } else if (_.isRegExp(actualArg)) { return containing.toString() === actualArg.toString() } else { return false } } else if (isMatcher(containing)) { return containing.__matches(actualArg) || _.some(actualArg, containing.__matches) } else if (containing instanceof Date) { return actualArg instanceof Date && containing.getTime() === actualArg.getTime() } else if (containing instanceof Error) { return actualArg instanceof Error && _.includes(actualArg.message, containing.message) } else if (_.isObjectLike(containing) && _.isObjectLike(actualArg)) { return containsPartialObject(containing, actualArg) } else if (_.isString(actualArg) || _.isArray(actualArg)) { return _.includes(actualArg, containing) } else { _.isEqual(actualArg, containing) } } const containsPartialObject = (containing, actual) => { return _.every(containing, (val, key) => _.isEqualWith(val, actual[key], equalish) ) }