For

2024.2.1

PothosのMocks Pluginでresolverをモックする

概要

今回はPothosの Mocks Plugin を使ってresolverをモックしてみたいと思います。

Pothos - Mocks Plugin

手順

現状

Projectというモデルに3つのレコードが登録されていて、projectsのresolverでは以下のdataを取得できるという状態から始めます。

Query

GraphQL_____Query_____query Projects {
  projects {
    id
  }
}


レスポンス

JSON_____response_____{
  "data": {
    "projects": [
      {
        "id": "1"
      },
      {
        "id": "2"
      },
      {
        "id": "3"
      }
    ]
  }
}


Mocks Pluginをインストール

bash_____terminal_____yarn add @pothos/plugin-mocks


TypeScript_____SchemaBuilder_____export const builder = new SchemaBuilder<{
  Context: {};
  PrismaTypes: PrismaTypes;
}>({
  plugins: [PrismaPlugin, MocksPlugin], // <- MocksPluginを追加
  prisma: {
    client: prisma,
  },
});


モックするresolverを定義


TypeScript_____builder.toSchema_____import { builder } from './builder';

export const schema = builder.toSchema({
  mocks: {
    Query: {
      projects: (parent, args, context, info) => [{ id: 'hoge' }],
    },
  },
});


レスポンスを確認


JSON_____response_____{
  "data": {
    "projects": [
      {
        "id": "hoge"
      }
    ]
  }
}


たったこれだけでモックできてしまいました。

まとめ

今回はPothosの公式ページにも掲載されているMocks Pluginを使ってresolverをモックしてみました。
非常に簡単にresolverをモックできるので、各resolverごとに環境変数や切り替え可能な変数などでモックするかどうか管理できるようにすると良さそうに思いました。