その他

【Jest超基礎】一般的なマッチャーの使い方

その他
この記事は約6分で読めます。

はじめに

この記事は実務1ヶ月の新人エンジニアがアウトプットを目的として書いている記事になります。
やって参りました!Jest超基礎シリーズ第2回となります。
ドキュメントに沿って進めているので、導入がまだの方はこちらからご覧下さい。

マッチャーとは

テストの評価条件を定義するメソッドになります。
テスト結果(期待する値)を定義します。
もう少し簡単に説明すると、テストコードを書くときの特別なメソッドって認識でOKです!!

test('2+2が4になるかをテストする', () => {
  expect(2 + 2).toBe(4);
});

というコードがあった場合、2+2が4と===(同じ値)になることをexpect(期待)しているということになります。
toBe(4)の部分がマッチャーになるということですね!

.not

検証を否定するマッチャーです。同じ値ではないことを確認する場合に使います。

test('2+2が5にならないことをテストする', () => {
  expect(2 + 2).not.toBe(5);
});

.toBeNull()

nullになるかを検証する場合に使います。nullのみ一致。

test('nullになることをテストする', () => {
  expect(null).not.toBeNull();
});

.toBeUndefined().toBeDefined()

.toBeUndefined undefinedになるかを検証する場合に使います。undefinedのみ一致。
.toBeDefined toBeUndefinedの逆。

test('undefinedになることをテストする', () => {
  expect(undefined).toBeUndefined();
  expect(undefined).not.toBeDefined();
});

test('undefinedにならないことをテストする', () => {
  expect(1).toBeDefined();
  expect(1).not.toBeUndefined();
});

.toBeTruthy()

trueになるかを検証する場合に使います。

test('trueになることをテストする', () => {
  expect(true).toBeTruthy();
  expect(1).toBeTruthy();
  expect('aaa').toBeTruthy();
});

.toBeFalsy()

falseになるかを検証します。falseだけではなくundefinedやnull、0もfalseになります。

test('falseになることをテストする', () => {
  expect(false).toBeFalsy();
  expect(undefined).toBeFalsy();
  expect(null).toBeFalsy();
  expect(0).toBeFalsy();
});

.toBeGreaterThan(number)

numberより大きくなることを検証します。〇〇より大きいなので同じ値を含みません。

test('10より大きくなることをテストする', () => {
  expect(12).toBeGreaterThan(10);
  expect(5 + 6).toBeGreaterThan(10);
  expect(5 + 5).not.toBeGreaterThan(10);
});

.toBeGreaterThanOrEqual(number)

number以上になることを検証します。〇〇以上なので同じ値を含みます。

test('10以上なることをテストする', () => {
  expect(12).toBeGreaterThanOrEqual(10);
  expect(5 + 6).toBeGreaterThanOrEqual(10);
  expect(5 + 5).toBeGreaterThanOrEqual(10);
});

.toBeLessThan(number)

numberより小さくなることを検証します。〇〇より小さいなので同じ値を含みません。

test('10より小さくなることをテストする', () => {
  expect(8).toBeLessThan(10);
  expect(5 + 4).toBeLessThan(10);
  expect(5 + 5).not.toBeLessThan(10);
});

.toBeLessThanOrEqual(number)

number以下になることを検証します。〇〇以下なので同じ値を含みます。

test('10以下なることをテストする', () => {
  expect(8).toBeLessThanOrEqual(10);
  expect(5 + 4).toBeLessThanOrEqual(10);
  expect(5 + 5).toBeLessThanOrEqual(10);
});

.toMatch()

文字列に対して正規表現でマッチするかを検証します。

test('Iが含まれているかどうかテストする', () => {
  expect('team').not.toMatch(/I/);
});

test('stopが含まれているかテストする', () => {
  expect('Christoph').toMatch(/stop/);
});

.toContain(item)

配列やオブジェクトの中にitemが含まれているかを検証するために使います。

const fruits = [
  'りんご',
  'バナナ',
  'パイナップル',
  'みかん',
  'ぶどう',
];

test('バナナが含まれているかをテストする', () => {
  expect(fruits).toContain('バナナ');
  expect(new Set(fruits)).toContain('バナナ');
});

.toThrow()

例外が発生したかを検証するために使います。

function compileAndroidCode() {
  throw new Error('例外が発生しました。');
}

test('例外が発生したかをテストする', () => {
  expect(() => compileAndroidCode()).toThrow();
  expect(() => compileAndroidCode()).toThrow(Error);
  expect(() => compileAndroidCode()).toThrow('例外が発生しました');

});

参考文献

Using Matchers
reference docs
Facebook製のJavaScriptテストツール「Jest」の逆引き使用例