3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

NestJSでPrismaのMockを使う

Last updated at Posted at 2022-10-14

統合テストやユニットテストをするときに、外的要素であるデータベースから分離したいですよね。

弊プロダクトでは、NestJSにPrismaを導入しているので、PrismaのMock機能を使ってDBのモックを作って結合テストをしてみようと思います。

基本的には公式ドキュメントを参考にしています。

依存関係のインストール

yarn add -D jest-mock-extended

npmをご利用の際は置き換えてください

また、dockerをインストールしておいてください

必要なファイルの作成

docker-compose.ymlを作成します。

docker-compose.yml
# Set the version of docker compose to use
version: '3.9'

# The containers that compose the project
services:
  db:
    image: postgres:13
    restart: always
    container_name: integration-tests-prisma
    ports:
      - '5433:5432'
    environment:
      POSTGRES_USER: prisma
      POSTGRES_PASSWORD: prisma
      POSTGRES_DB: tests

.env.testを作成します。

.env.test
DATABASE_URL="postgresql://prisma:prisma@localhost:5433/tests"

[動作確認]DBコンテナイメージの実行

DBのコンテナを立ち上げます

docker-compose up -d

コンテナが立ち上がったことを確認します。

docker ps
結果
ONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS        PORTS                    NAMES
6ad53ea38369  postgres:13       "docker-entrypoint.s…"   3 minutes ago   Up 3 minutes  0.0.0.0:5433->5432/tcp   integration-tests-prisma

PestgrSQLにログインできたことを確認します。

docker exec -it 6ad53ea38369 psql -U prisma tests
結果
tests-# \l
                              List of databases
   Name    | Owner  | Encoding |  Collate   |   Ctype    | Access privileges 
-----------+--------+----------+------------+------------+-------------------
 postgres  | prisma | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | prisma | UTF8     | en_US.utf8 | en_US.utf8 | =c/prisma        +
           |        |          |            |            | prisma=CTc/prisma
 template1 | prisma | UTF8     | en_US.utf8 | en_US.utf8 | =c/prisma        +
           |        |          |            |            | prisma=CTc/prisma
 tests     | prisma | UTF8     | en_US.utf8 | en_US.utf8 | 
(4 rows)

tests-# 

package.jsonにスクリプトを追加する

テストを実行するためのスクリプトを追加します。

上記で作成したDBコンテナに接続したいので、dotenvで上記で作成した.env.testを参照します

package.json
// ~~
  "scripts": {
    "docker:up": "docker-compose up -d",
    "docker:down": "docker-compose down",
    "test": "yarn docker:up && dotenv -e .env.test yarn prisma migrate deploy && jest -i"
  },
// ~~

テストを実行する

yarn test

スクリーンショット 2022-10-14 18.07.47.png

SeedあとはSeedを追加したりしてテストコードを存分に書けます。

PrismaのSeedの作り方はこちら。これから試します。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?