All files index.js

96.88% Statements 31/32
91.67% Branches 11/12
100% Functions 9/9
100% Lines 26/26

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38  8x 7x 7x   2x 3x     1x 17x 13x 13x 13x 13x   13x 6x 6x 6x     7x   17x 17x 17x 17x 17x 17x 17x 2x 2x     17x    
function deepEqual (expected, actual) {
  if (!expected || !actual) return false
  Iif (typeof expected !== typeof actual) return false
  if (typeof expected !== 'object') return expected === actual
 
  return Object.keys(expected).length === Object.keys(actual).length &&
         Object.keys(expected).every(key => deepEqual(expected[key], actual[key]))
}
 
exports.spy = (spiedFn) => {
  const fn = (...args) => {
    fn.called = true
    fn.notCalled = false
    fn.args.push(args)
    fn.callCount = fn.args.length
 
    if (typeof spiedFn === 'function') {
      let spiedReturn = spiedFn(...args)
      fn.returns.push(spiedReturn)
      return spiedReturn
    }
 
    return null
  }
  fn.called = false
  fn.notCalled = true
  fn.callCount = 0
  fn.args = []
  fn.returns = []
  fn.returned = (expected) => fn.returns.some(returned => deepEqual(expected, returned))
  fn.calledWith = (...expected) => {
    return fn.args.some(args => {
      return expected.every((expectedArg, i) => expectedArg === args[i])
    })
  }
  return fn
}