generated at
Jest

anything
null undefined 以外のものにマッチする
expect(...).toEqual(expect.anything())

any
そのコンストラクタで生成されたものにマッチする
expect(...).toEqual(expect.any(Number))

jest.mock
よく使い方がわからない代表
たぶん globals.moduleName を再帰的にたどって mock に置き換える
jest.mock('module') でそのモジュールを mock に置き換える、他の module で import しているのもモックできる
mock.ts
import {google} from 'googleapis'; jest.mock('googleapis'); const mocked = google as jest.Mocked<typeof google>; const datastore = { projects: { export: jest.fn().mockReturnValue({data:'mocked'}) }, }; mocked.datastore.mockReturnValue(datastore as any); hoge() // 中で datastore('v1').projects.export(...) を呼んでいる関数 expect(datastore.projects.export).toBeCalledWith(...)

ts-jest の mocked() と組み合わせて使うと楽

diagnostic
jest.config.js globals.ts-jest.diagnostics にオプションを渡せば無効にできる
ignoreCodes ならこういう感じで
jest.config.js
module.exports = { preset: 'ts-jest', testEnvironment: 'node', rootDir: 'src', globals: { 'ts-jest': { diagnostics: { ignoreCodes: [151001], }, }, }, };

jest が遅いやつ

with @testing-library/jest-dom

jest 26 → 27 などでうまくうごかない
setImmediate など timer 系メソッドが無い, 挙動が変 / fetch などで動作が変 / なんか動かない といったことがある

大抵 testEnvironment 周りの取り扱いにミスって node と jsdom 混ぜてしまっている
(混ぜざるおえないテストになっている)
jest.config.js などで testEnvironment を指定する(省略していたら node)
ブラウザで動くことを期待するテストでは jsdom を使う
同梱されなくなったので jest-environment-jsdom 入れる
node で動くことを期待するなら node を使う
両方あるプロジェクト(Next.js などで /api 以下サーバーサイドで実行するコードをテストしつつ React コンポーネントももテストするとか)であれば
ファイル単位で切り替える
ファイル先頭に書く(docblock)
docblock
/** * @jest-environment jsdom */
サーバーサイドの情報が必要なところはモックする
もしモックできずに実際の API を叩いて事前状態を整えたりしたい場合はどうする?