【ITニュース解説】Mock Prisma with Jest in NestJS

2025年09月05日に「Dev.to」が公開したITニュース「Mock Prisma with Jest in NestJS」について初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

ITニュース概要

NestJSでPrismaを使うサービスのテスト時、JestでPrismaServiceをモックする方法を紹介。テスト用にPrismaServiceの型を定義し、`findMany`などのメソッドを`jest.fn()`でモック化。`Test.createTestingModule`でモックを`useValue`として登録し、テスト対象のサービスに注入。これにより、実際のDB接続なしで、メソッドの呼び出しや戻り値を検証可能になる。

出典: Mock Prisma with Jest in NestJS | Dev.to公開日:

ITニュース解説

この記事では、NestJSというフレームワークで開発されたアプリケーションのテストにおいて、PrismaというデータベースクライアントをMock(モック)する方法について解説する。特に、Jestというテストフレームワークと組み合わせて使用する場合に、TypeScriptの型定義を活用して、より安全かつ効率的にモックを作成するパターンを紹介している。

まず、NestJSとPrisma、Jestという3つの技術要素について簡単に説明する。

NestJSは、スケーラブルなサーバーサイドアプリケーションを構築するためのフレームワークだ。TypeScriptで記述され、構造化されたアーキテクチャを提供することで、開発者が保守性の高いコードを書くのを支援する。

Prismaは、データベースへのアクセスを簡単にするためのORM(Object-Relational Mapper)だ。データベーススキーマを定義し、TypeScriptの型安全性を提供しながら、データベース操作を行うためのクライアントを生成する。これにより、生のSQLクエリを書く手間を省き、開発効率を向上させることができる。

Jestは、JavaScriptとTypeScriptのためのテストフレームワークだ。シンプルなAPI、高速な実行速度、そして豊富な機能により、開発者はユニットテスト、結合テスト、E2Eテストなど、さまざまな種類のテストを容易に記述できる。

さて、本題のPrismaのモックについて説明する。テスト対象のサービスがPrismaクライアントを使用してデータベースにアクセスする場合、テスト中に実際のデータベースに接続するのは望ましくない。なぜなら、テストデータを用意したり、データベースの状態を管理したりする必要があるからだ。そこで、Prismaクライアントの代わりに、モックオブジェクトを使用する。モックオブジェクトは、実際のPrismaクライアントの振る舞いを模倣するもので、テスト中に特定の値を返すように設定できる。

記事で紹介されているモックの手法は、以下の手順で行われる。

  1. モックオブジェクトの型定義: まず、モックオブジェクトの型を定義する。これは、TypeScriptのインターフェースまたは型エイリアスを使用して行う。この型定義では、モックするPrismaクライアントのメソッド(例えば、findManyなど)を定義し、それぞれのメソッドの戻り値の型を指定する。jest.Mock型を使用することで、これらのメソッドがJestのモック関数であることを明示する。

  2. モックオブジェクトの作成と提供: 次に、実際にモックオブジェクトを作成し、NestJSの依存性注入の仕組みを使って、テスト対象のサービスに提供する。Test.createTestingModuleメソッドを使用してテストモジュールを作成し、providers配列にモックオブジェクトを登録する。provideプロパティには、モックするサービス(ここではPrismaService)を指定し、useValueプロパティには、作成したモックオブジェクトを指定する。

  3. モックオブジェクトの取得: テストモジュールから、モックオブジェクトを取得する。module.get(PrismaService)メソッドを使用することで、テストモジュールにバインドされたモックオブジェクトを取得できる。

  4. モックの設定と検証: 最後に、取得したモックオブジェクトのメソッドに対して、期待される振る舞いを設定し、テストを実行する。mockResolvedValueメソッドを使用して、モックメソッドが返す値を設定する。toHaveBeenCalledメソッドを使用して、モックメソッドが呼び出されたかどうかを検証する。

この方法の利点は、TypeScriptの型定義を活用することで、モックオブジェクトの型安全性を確保できることだ。これにより、テストコードのコンパイル時に、型エラーを検出できる可能性が高まり、より信頼性の高いテストを書くことができる。

例えば、findManyメソッドが特定のオブジェクトの配列を返すことを期待する場合、モックオブジェクトの型定義で、findManyメソッドの戻り値の型をそのオブジェクトの配列として定義する。そして、mockResolvedValueメソッドで、その型のオブジェクトの配列を返すように設定する。もし、間違った型の値を返そうとした場合、TypeScriptコンパイラがエラーを検出し、テストの実行前に問題を修正できる。

このように、NestJS、Prisma、Jestを組み合わせた開発において、TypeScriptの型定義を活用してモックを作成することで、テストの品質を向上させ、より堅牢なアプリケーションを構築できる。この記事は、そのための具体的なパターンを示している。

【ITニュース解説】Mock Prisma with Jest in NestJS | いっしー@Webエンジニア