はじめに
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
});
});
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();
});
});
.toBeFalsy()はfalsyな値をパスします。
結論
booleanの値をチェックする場合には、toEqual(false)を使う
falsyな値をチェックする場合には、toBeFalsy()を使う
終わりに
以下を読むと今回確認した内容が記載されているので、ちゃんとドキュメントを読むべきだと実感しました。
https://jestjs.io/ja/docs/expect#tobefalsy
JestのMachersについてはまだ使ったことがないものも多いので、ドキュメントを読みつつ試して使ってみようと思います。