index.js (895B)
1 module.exports = { 2 isA: function (actual, expected) { 3 const result = { 4 message: () => `Expected ${actual} to be a ${expected.name}`, 5 pass : false 6 }; 7 switch (expected) { 8 case Object: 9 result.pass = (!!actual) && ('object' === typeof actual); 10 return result; 11 case Function: 12 case Number: 13 case String: 14 if ('object' === typeof actual) { 15 result.pass = actual instanceof expected; 16 return result; 17 } else { 18 result.pass = expected.name.toLowerCase() === typeof actual; 19 return result; 20 } 21 default: 22 if ('function' === typeof expected['is' + expected.name]) { 23 result.pass = expected['is' + expected.name](actual); 24 return result; 25 } else { 26 result.pass = actual instanceof expected; 27 return result; 28 } 29 } 30 } 31 };