.toBe(true) or .toBeTruthy()

.toBe(true) or .toBeTruthy()

ยท

1 min read

I was reviewing a feature on GitHub and noticed my colleague sometimes used .toBe(true) and other times .toBeTruthy(). This got me wondering, are they actually different? After a quick search, I found out they are โ€“ and it's all in their names ๐Ÿ˜…. In this post, I'll break down these two functions and how they're not quite the same

.toBe(true) - Strict Equality

  • .toBe(true) is used to test strict equality. It checks if the value being tested is exactly true.

  • This means that the test will only pass if the value is the Boolean primitive true.

  • It's similar to using === true

test('strict true check', () => {
  const value = true;
  expect(value).toBe(true); // Passes
});

.toBeTruthy() - Truthiness Check

  • .toBeTruthy(), on the other hand, tests for 'truthiness' rather than strict Boolean true.

  • A value is considered "truthy" if it translates to true when evaluated in a Boolean context.

  • This includes values like 1, 'non-empty string', {}, [], and obviously true itself.

test('truthiness check', () => {
  const number = 1;
  const string = 'hello';
  expect(number).toBeTruthy(); // Passes
  expect(string).toBeTruthy(); // Passes
});

That's it. Hope it's helpful.

ย