Hone logo
Hone
Problems

Implementing toBeTruthy in Jest

Jest's toBeTruthy matcher is a crucial tool for asserting that a value evaluates to true in a boolean context. This challenge asks you to implement a custom Jest matcher that replicates the functionality of toBeTruthy. Understanding how matchers work and how to extend Jest is a valuable skill for writing robust and expressive tests.

Problem Description

You need to create a custom Jest matcher named toBeTruthy. This matcher should take a value as input and return true if the value is truthy (i.e., evaluates to true when converted to a boolean) and false otherwise. The matcher should be designed to provide clear and informative error messages when the assertion fails.

Key Requirements:

  • Truthy Evaluation: The matcher must correctly determine if a value is truthy according to JavaScript's boolean conversion rules.
  • Clear Error Messages: When an assertion fails, the matcher should provide a descriptive error message indicating the expected and actual values.
  • Integration with Jest: The matcher should seamlessly integrate with Jest's assertion framework.
  • Type Safety: The implementation should be written in TypeScript and maintain type safety.

Expected Behavior:

The toBeTruthy matcher should behave identically to Jest's built-in toBeTruthy matcher. This includes handling various data types and edge cases.

Edge Cases to Consider:

  • true
  • false
  • null
  • undefined
  • 0
  • 1
  • "" (empty string)
  • "hello" (non-empty string)
  • [] (empty array)
  • [1, 2, 3] (non-empty array)
  • {} (empty object)
  • { a: 1 } (non-empty object)
  • NaN

Examples

Example 1:

Input: true
Output: true
Explanation: The value `true` is truthy.

Example 2:

Input: 0
Output: false
Explanation: The value `0` is falsy.

Example 3:

Input: "hello"
Output: true
Explanation: The value "hello" is truthy.

Example 4:

Input: []
Output: false
Explanation: The value [] is falsy.

Constraints

  • The matcher must be implemented using TypeScript.
  • The matcher should be compatible with Jest versions 25 and above.
  • The matcher should not introduce any performance regressions compared to Jest's built-in toBeTruthy.
  • The matcher should be well-documented with JSDoc comments.

Notes

  • You'll need to create a Jest custom matcher extension file (e.g., toBeTruthy.ts).
  • The matcher extension file should export a function that returns an object with toBeTruthy as a property.
  • The toBeTruthy property should be a function that takes the expected value and the actual value as arguments and returns an object with pass and message properties.
  • Refer to the Jest documentation on custom matchers for detailed guidance: https://jestjs.io/docs/creating-custom-matchers
  • Consider using Jest's matchers API for creating the matcher.
Loading editor...
typescript