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 について、公式ドキュメントで記載がなかったのはなんでだろう…見落とし?
コメント