## 事象 [[pnpm]]を使って[[Jest]]をインストールしたとき、[[TypeScript]]のテストを実行すると以下のエラーになる。 ```error index.test.ts:1:30 - error TS2307: Cannot find module '@jest/globals' or its corresponding type declarations. 1 import { test, expect } from "@jest/globals"; ~~~~~~~~~~~~~~~ ``` ### 再現手順 ```bash mkdir pnpm-jest-sandbox cd $_ pnpm add -D typescript jest pnpm add -D babel-jest @babel/core @babel/preset-env @babel/preset-typescript cat >babel.config.js << 'EOF' module.exports = { presets: [ ['@babel/preset-env', {targets: {node: 'current'}}], '@babel/preset-typescript', ], }; EOF cat >index.test.ts << 'EOF' import { test, expect } from "@jest/globals"; test("sample", () => { const x = 1; expect(x).toBe(1); }); EOF pnpx jest npx tsc --noEmit index.test.ts ``` ## 原因 `@jest/globals`を明示的にインストールしていないため、[[pnpm]]だと`node_modules`配下に`@jest/globals`が追加されないから。 [[npm]]の場合は依存関係が依存しているパッケージもすべて`node_modules`配下にフラットに展開されるため、`@jest/globals`が依存関係に存在する。なお、依存関係は以下の通りであり、`jest-runtime`の依存関係となっている。 ``` jest 29.7.0 ├─┬ @jest/core 29.7.0 │ ├─┬ jest-config 29.7.0 │ │ ├─┬ jest-circus 29.7.0 │ │ │ └─┬ jest-runtime 29.7.0 │ │ │ └── @jest/globals 29.7.0 ``` > [!note] > [[npm]]では`@jest/globals`のインストールを忘れてしまっても動いてもしまうため、気づきにくい状態になっている...。 ## 解決方法 `@jest/globals`を明示的にインストールする。 ```console pnpm add -D @jest/globals ``` 公式サイトでも明示的なインストールをするように案内されている。 <div class="link-card"> <div class="link-card-header"> <img src="https://jestjs.io/ja/img/jest.png" class="link-card-site-icon"/> <span class="link-card-site-name">jestjs.io</span> </div> <div class="link-card-body"> <div class="link-card-content"> <p class="link-card-title">はじめましょう · Jest</p> <p class="link-card-description">お気に入りのパッケージマネージャーを使用して Jest をインストールします。</p> </div> <img src="https://jestjs.io/ja/img/opengraph.png" class="link-card-image" /> </div> <a href="https://jestjs.io/ja/docs/getting-started#type-definitions"></a> </div>