Jest の v28 調べた感想

jest の v28 がアップデートされているので、変更点確認してみました。

サポートされている Node の versions は 12.13+、Typescript については 4.3+以上になります。

目次

構成について Config 周り

まずは構成について、package.json だったり、jest.config.js、jest.config.ts あたりかなと

extraGlobals が廃止

extraGlobals が廃止され、sandboxInjectedGlobals に変更されたそうです。

- extraGlobals: ['Math']
+ sandboxInjectedGlobals: ['Math']

そもそも extraGlobals が何なんだって話なんですけど、

テストファイルは vm で基本的に実行されるために、Math 関数などの呼び出しはちょっと遅いようです。
このオプションを指定することによって vm 内の探索を高速化してくれるようです。

expect について

default の export から名前付け import ができるようになったよう

- import expect from 'expect';
+ import {expect} from 'expect';

timers が fakeTimers になる

なんで名前を変えたんだろうと思いますが、fakeTimers にしたほうがイメージしやすかったのでしょうか。

たしかこれが、setTimeout をハックして偽装のタイムアウトを作る際に使用するはず
例えば実際のプログラムで 30 分定期的に実行されるプログラム関数を、テスト時もその関数を使用して 30 分待つのはちょっとあれですよね。

jest.useFakeTImers();
jest.spyOn(global, 'setTimeout');

上記のようにすることで Timers をいい感じの値に調整しようという意図でしょう。

jest dom の別途インストール

jsdom を使用している場合は、jest-environment-jsdom を別でインストールするように変更されています。

yarn add --dev jest-environment-jsdom

テストランナーについて

テストランナーに jasmine 使っている場合は、jest-jasmine2 をインストールしなくてはいけません。

yarn add --dev jest-jasmine2

Transformer

process だったり processAsync の戻り値は string から object に変わったようです〜

jest.fn()

ジェネリクスで受け付けられるタイプが 1 つだけになったようです。

- const mock = jest.fn<number, []>()
+ const mock = jest.fn<() => number>()

jest.fn は関数をモックするときに使用するものです。
mockImplementationOnce などでも同様のことができます

v27 の実際の定義は以下

    function fn<T, Y extends any[]>(implementation?: (...args: Y) => T): Mock<T, Y>;

number と[]を定義にとっていたものが、以下のように変更されています。

v28 の定義

  fn(implementation?: T): Mock;

まとめ

v29 もリリース間近のようですので、追っていけたらなと思います。
Simen さんのブログであった、Sharding of test run について、公式ドキュメントで記載がなかったのはなんでだろう…見落とし?

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

数学科出身のSoftware Engineer
情報通信が好きなのでブログを活用して発信しています。

コメント

コメントする

目次
閉じる