4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Jest】イコールの評価しよう〜toBe関数とtoEqual関数の違い〜

Posted at

はじめに

テストの評価にはexpect関数を利用します。イコールの評価には、toBe関数toEqual関数を使用します。toBe関数toEqual関数を普段使ってましたが、違いがあることに学んでて知りました。違いについてもまとめたいと思います。

expect関数

toBe関数toEqual関数

  • どちらも値がイコールか比較する際に使用する
  • toBeはインタンスの参照まで確認する
food.test.js
const food1 = {
  type: "yakiniku",
  price: 300,
};
const food2 = {
  type: "yakiniku",
  price: 300,
};

const food3 = food2;

test("have all the same properties -- ①", () => {
  expect(food1).toEqual(food2);
});

test("are not the exact same food -- ②", () => {
  expect(food1).not.toBe(food2);
});

test("are the same references -- ③", () => {
  expect(food2).toBe(food3);
});

test("are the same value -- ④", () => {
  expect(food1.price).toBe(food2.price);
  expect(food1.price).toEqual(food2.price);
});
実行結果
$ npx jest food.test.js
 PASS  src/food.test.js
  ✓ have all the same properties --(2 ms)
  ✓ are not the exact same food -- ②
  ✓ are the same references -- ③
  ✓ are the same value -- ④

Test Suites: 1 passed, 1 total
Tests:       4 passed, 4 total
Snapshots:   0 total
Time:        0.383 s, estimated 1 s
Ran all test suites matching /food.test.js/i.

① toEqual関数は、同じプロパティ、同じ値が同じため、イコールになります。
② toBe関数を利用して比較しているため、同じプロパティ、同じ値でも異なるインスタンスのためnotになります。
③ food2とfood3は同じ参照をもっているため、イコールになります。
④ food1とfood2のpriceを比較しています。こちらはプリミティブな値のため、toBe関数toEqual関数両方ともイコールになります。

注意点

  • toEqual関数は、異なる2つのクラスのインスタンスが全く同じプロパティをもつ場合、イコールの結果になります。
assertion.test.js
test("toEqualは、全く同じプロパティをもつとイコールと判定される", () => {
  class Hoge {
    constructor() {
      this.message = "hello";
    }
  }

  class Hogehoge extends Hoge {
    constructor() {
      super();
    }
  }

  const hoge = new Hoge();
  const hogehoge = new Hogehoge();

  // 全く同じプロパティをもつためイコールと判定される
  expect(hoge).toEqual(hogehoge);

  // クラス名を評価した場合は、異なると評価される
  expect(hoge.constructor.name).not.toEqual(hogehoge.constructor.name);
});
実行結果
$ npm test /Users/jest-basic/src/assertion.test.js

> jest-basic@1.0.0 test /Users/jest-basic
> jest "/Users/jest-basic/src/assertion.test.js"

 PASS  src/assertion.test.js
  ✓ toEqualは、全く同じプロパティをもつとイコールと判定される (4 ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        0.594 s, estimated 1 s
Ran all test suites matching 
4
3
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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?