EasyJavaScriptTypeScript

Implement expect() Matchers

TestingJavaScriptUtilities

Implement a lightweight version of Jest's expect() API.

solve(matcher, received, expected?) must support these matchers:

MatcherDescription
'toBe'Strict equality (===). expected required.
'toEqual'Deep equality (nested objects/arrays). expected required.
'toBeTruthy'Passes if received is truthy.
'toBeFalsy'Passes if received is falsy.
'toBeNull'Passes if received === null.
'toBeUndefined'Passes if received === undefined.
'toBeDefined'Passes if received !== undefined.

Return an object { pass: boolean, message: string }.

When passing, message is ''.
When failing, message is a human-readable explanation, e.g.:

  • "Expected 5 but received 3"
  • "Expected value to be truthy but received false"
solve('toBe', 42, 42)        // { pass: true, message: '' }
solve('toBe', 42, 43)        // { pass: false, message: 'Expected 43 but received 42' }
solve('toEqual', {a:1}, {a:1}) // { pass: true, message: '' }
solve('toBeTruthy', 0)       // { pass: false, message: 'Expected value to be truthy but received 0' }

Sample tests

Test #1toBe — matching numbers
Input: ["toBe",42,42]
Output: {"pass":true,"message":""}
Test #2toBe — mismatch
Input: ["toBe",42,43]
Output: {"pass":false,"message":"Expected 43 but received 42"}
Test #3toBe — strings match
Input: ["toBe","hello","hello"]
Output: {"pass":true,"message":""}
Test #4toEqual — deep objects match
Input: ["toEqual",{"a":1,"b":[2,3]},{"a":1,"b":[2,3]}]
Output: {"pass":true,"message":""}
Test #5toEqual — deep mismatch
Input: ["toEqual",{"a":1},{"a":2}]
Output: {"pass":false,"message":"Expected {\"a\":2} but received {\"a\":1}"}
Test #6toBeTruthy — truthy value
Input: ["toBeTruthy",1]
Output: {"pass":true,"message":""}
Test #7toBeTruthy — falsy value
Input: ["toBeTruthy",0]
Output: {"pass":false,"message":"Expected value to be truthy but received 0"}