はじめに
テストの評価にはexpect
関数を利用します。イコールの評価には、toBe関数
とtoEqual関数
を使用します。toBe関数
とtoEqual関数
を普段使ってましたが、違いがあることに学んでて知りました。違いについてもまとめたいと思います。
expect関数
- Jestを使用する際は、expect関数はグローバル関数になるため、importをする必要はない
- 公式ドキュメント 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