LoginSignup
2
0

[Jest]toEqual(false)とtoBeFalsy()の違いについて

Posted at

はじめに

Jestでテストを書いていたときにtoEqual(false)とtoBeFalsy()について指摘を受けたので、どのような違いがあるのかをまとめてみました。

どんな違い?

コードを実行してtoEqual(false)とtoBeFalsy()の違いを見てみました。

toEqual(false)

以下のコードではbooleanのテスト以外失敗してしまいます。

describe("toEqual", () => {
  test("boolean", () => {
    const data = false;
    expect(data).toEqual(false); // pass
  });
  test("empty", () => {
    const data = "";
    expect(data).toEqual(false); // fail
  });
  test("0", () => {
    const data = 0;
    expect(data).toEqual(false); // fail
  });
  test("undefined", () => {
    const data = undefined;
    expect(data).toEqual(false); // fail
  });
  test("null", () => {
    const data = null;
    expect(data).toEqual(false); // fail
  });
});

image.png

toEqual()は引数に渡された値と一致した値をパスします。

toBeFalsy()

以下のテストコードを実行するとすべてPASSされます。

describe("toBeFalsy", () => {
  test.each([
    { testName: "false", data: false },
    { testName: "empty", data: "" },
    { testName: "0", data: 0 },
    { testName: "undefined", data: undefined },
    { testName: "null", data: null },
  ])("$testName", ({ data }) => {
    expect(data).toBeFalsy();
  });
});

image.png

.toBeFalsy()はfalsyな値をパスします。

結論

booleanの値をチェックする場合には、toEqual(false)を使う
falsyな値をチェックする場合には、toBeFalsy()を使う

終わりに

以下を読むと今回確認した内容が記載されているので、ちゃんとドキュメントを読むべきだと実感しました。
https://jestjs.io/ja/docs/expect#tobefalsy

JestのMachersについてはまだ使ったことがないものも多いので、ドキュメントを読みつつ試して使ってみようと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0