Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

モックの実装 #263

Merged
merged 28 commits into from
Jan 8, 2025
Merged

モックの実装 #263

merged 28 commits into from
Jan 8, 2025

Conversation

Pugma
Copy link
Collaborator

@Pugma Pugma commented Dec 27, 2024

User description

fix #128 の予定

各ファイルに書かれたサンプルデータをもとにしたモックを実装することにより、表示したい内容の入れ替えを簡単にできるようにした

ただ、これまで prism を使っていたときのようにスキーマからの自動生成は行えなくなっているので、ここだけどうするかを考える必要がありそう
prism と今回のモックを共存させて、どちらを使うかを自由に選べればより便利になりそう?


PR Type

Enhancement


Description

  • MSW(Mock Service Worker)を導入し、開発環境でのモックAPIの利用を可能にしました。
  • 各API(コンテスト、グループ、プロジェクト、ユーザー)のモックハンドラーを実装しました。
  • src/mocks/handler.tsにて、すべてのモックハンドラーを統合してエクスポートする仕組みを追加しました。
  • vite.config.tsから不要なプロキシ設定を削除しました。
  • public/mockServiceWorker.jsにMSWのワーカーを追加しました。
  • package.jsonおよびpackage-lock.jsonにMSW関連の依存関係を追加しました。
  • 不要な型宣言ファイル(PNG、SVG)を削除しました。
  • tsconfig.jsonから未使用のtypeRoots設定を削除しました。

Changes walkthrough 📝

Relevant files
Enhancement
7 files
main.ts
Added MSW setup for development environment                           
+8/-0     
contests.ts
Implemented mock handlers for contests API                             
+41/-0   
groups.ts
Implemented mock handlers for groups API                                 
+29/-0   
handler.ts
Combined all mock handlers into a single export                   
+11/-0   
projects.ts
Implemented mock handlers for projects API                             
+41/-0   
users.ts
Implemented mock handlers for users API                                   
+246/-0 
mockServiceWorker.js
Added MSW worker script                                                                   
+307/-0 
Miscellaneous
2 files
shims-png.d.ts
Removed unused PNG type declaration                                           
+0/-4     
shims-svg.d.ts
Removed unused SVG type declaration                                           
+0/-4     
Configuration changes
3 files
vite-env.d.ts
Updated Vite environment type references                                 
+2/-0     
vite.config.ts
Removed proxy server configuration                                             
+0/-10   
tsconfig.json
Removed unused `typeRoots` configuration                                 
+0/-4     
Dependencies
2 files
package-lock.json
Updated dependencies to include MSW and related packages 
+397/-0 
package.json
Added MSW configuration and dependencies                                 
+8/-2     

💡 PR-Agent usage: Comment /help "your question" on any pull request to receive relevant information

Copy link

@Pugma Pugma marked this pull request as draft December 27, 2024 03:06
Copy link

github-actions bot commented Dec 27, 2024

PR Reviewer Guide 🔍

(Review updated until commit ecfe327)

Here are some key observations to aid the review process:

🎫 Ticket compliance analysis 🔶

128 - Partially compliant

Fully compliant requirements:

  • モックの表示を改善する
  • モックライブラリを変更する

Not compliant requirements:

  • Swaggerにexampleを記載する
  • モックを使わずステージング環境に接続する
⏱️ Estimated effort to review: 4 🔵🔵🔵🔵⚪
🧪 No relevant tests
🔒 No security concerns identified
⚡ Recommended focus areas for review

Possible Initialization Issue

The setupWorker initialization for MSW is conditionally executed in development mode. Ensure this does not interfere with production builds or cause unexpected behavior.

import { setupWorker } from 'msw/browser'

if (import.meta.env.DEV) {
  const { handlers } = await import('./mocks/handler')
  const server = setupWorker(...handlers)
  await server.start({ onUnhandledRequest: 'bypass' })
}
Potential Filtering Logic Issue

The filtering logic for params.includeSuspended in the apis.getUsers handler may not include suspended users as expected. Verify the logic aligns with the intended behavior.

>('/api/v1/users', ({ params }) => {
  if (params.includeSuspended === 'true') {
    return HttpResponse.json(
      users
        .filter(user => user.state === UserAccountState.active)
        .map(user => ({
          id: user.id,
          name: user.name,
          realName: user.realName
        }))
    )
  }

  if (params.name) {
    return HttpResponse.json(
      users
        .filter(user => user.name === params.name)
        .map(user => ({
          id: user.id,
          name: user.name,
          realName: user.realName
        }))
    )
  }

  if (params.limit) {
    return HttpResponse.json(
      users.slice(0, parseInt(params.limit)).map(user => ({
        id: user.id,
        name: user.name,
        realName: user.realName
      }))
    )
  }

  return HttpResponse.json(
    users.map(user => ({
      id: user.id,
      name: user.name,
      realName: user.realName
    }))
  )

@Pugma
Copy link
Collaborator Author

Pugma commented Dec 27, 2024

そうだ、 k8s クラスタ上に立っている検証用環境でもモックをどう使うかとかは考えたほうがいいかもとだけメモ

@Pugma Pugma marked this pull request as ready for review December 30, 2024 13:15
@Pugma Pugma requested a review from Futadaruma December 30, 2024 13:15
@Pugma
Copy link
Collaborator Author

Pugma commented Dec 30, 2024

モックの内容に関してはあとからいい感じにすればいいかなって思ってます
とりあえず使える状態にはしたということで

@Pugma Pugma enabled auto-merge December 30, 2024 13:16
Copy link

Persistent review updated to latest commit ecfe327

@Pugma Pugma disabled auto-merge December 30, 2024 14:14
@Pugma
Copy link
Collaborator Author

Pugma commented Dec 30, 2024

/improve

@Pugma
Copy link
Collaborator Author

Pugma commented Dec 30, 2024

/improve

@Pugma
Copy link
Collaborator Author

Pugma commented Dec 31, 2024

/improve

@Pugma
Copy link
Collaborator Author

Pugma commented Dec 31, 2024

/improve

@Pugma
Copy link
Collaborator Author

Pugma commented Dec 31, 2024

/improve

Copy link

github-actions bot commented Dec 31, 2024

PR Code Suggestions ✨

Latest suggestions up to 4ba7137

CategorySuggestion                                                                                                                                    Score
Possible issue
非同期処理の失敗時にエラーをキャッチするためのハンドリングを追加します。

enableMocking の非同期処理が失敗した場合にエラーがキャッチされないため、.catch() を追加してエラーハンドリングを実装してください。

src/main.ts [19-25]

-enableMocking().then(() => {
-  const pinia = createPinia()
-  const app = createApp(App)
-  
-  app.use(router)
-  app.use(pinia)
-  app.mount('#app')
-})
+enableMocking()
+  .then(() => {
+    const pinia = createPinia()
+    const app = createApp(App)
+    
+    app.use(router)
+    app.use(pinia)
+    app.mount('#app')
+  })
+  .catch(error => {
+    console.error('Error enabling mocking:', error)
+  })
Suggestion importance[1-10]: 9

Why: Adding error handling to the enableMocking function ensures that any issues during the asynchronous process are captured and logged, improving the robustness and debuggability of the application.

9
General
日付文字列のフォーマットが正しいかを保証するために ISO 8601 検証を追加します。

sampleContestDetailduration フィールドに含まれる日付文字列が ISO 8601
形式であることを確認し、フォーマットの検証を追加してください。

src/mocks/contests.ts [37-39]

 duration: {
-  since: '2021-01-01T00:00:00Z',
-  until: '2024-01-01T00:00:00Z'
+  since: new Date('2021-01-01T00:00:00Z').toISOString(),
+  until: new Date('2024-01-01T00:00:00Z').toISOString()
 }
Suggestion importance[1-10]: 7

Why: Ensuring that date strings are in ISO 8601 format improves data consistency and prevents potential issues with date parsing. However, the suggestion assumes the need for validation without evidence of a problem in the PR.

7
不自然な未来の年が設定されている箇所を確認し、適切な値に修正します。

sampleProjectduration フィールドで未来の年(2100年)が設定されていますが、意図的な値であるか確認してください。

src/mocks/projects.ts [10-12]

 duration: {
   since: { year: 2015, semester: 0 },
-  until: { year: 2100, semester: 1 }
+  until: { year: 2025, semester: 1 } // Adjusted to a more reasonable future year
 }
Suggestion importance[1-10]: 6

Why: The suggestion highlights a potential issue with an unusually distant future year, which could be a mistake or intentional. While the adjustment is reasonable, it assumes the original value is incorrect without confirmation.

6
サンプルデータの一貫性を高めるためにユニークな URL を設定します。

sampleAccountsurl フィールドがすべて同じ値になっているため、ユニークな値に変更するか、意図的な設定であるか確認してください。

src/mocks/users.ts [16]

-url: 'https://sample.com'
+url: 'https://sample.com/account-specific-path'
Suggestion importance[1-10]: 5

Why: Making the sample URLs unique could improve the realism of the mock data, but it is not critical to the functionality of the code. The suggestion assumes the need for uniqueness without clear justification.

5
Security
公開ディレクトリ設定が適切であるか確認する。

mswworkerDirectorypublicに設定していますが、公開ディレクトリとして適切か確認してください。意図しないファイルが公開されるリスクがあります。

package.json [44-47]

 "msw": {
   "workerDirectory": [
-    "public"
+    "src/mocks"
   ]
 }
Suggestion importance[1-10]: 7

Why: The suggestion highlights a potential security risk by pointing out that the public directory might unintentionally expose sensitive files. It proposes using a safer directory (src/mocks), which could improve security. However, it is not actionable without further context about the project's structure.

7
新規追加ライブラリのバージョンと脆弱性を確認する。

新たに追加されたmswや関連ライブラリのバージョンが最新であることを確認し、既知の脆弱性がないかチェックしてください。

package-lock.json [2817-2820]

 "msw": {
-  "version": "2.7.0",
+  "version": "2.8.0",
   ...
 }
Suggestion importance[1-10]: 6

Why: The suggestion emphasizes checking for vulnerabilities in the newly added msw library and ensuring its version is up-to-date. While this is a good practice, the proposed version change to "2.8.0" is speculative and lacks justification, slightly reducing its impact.

6

Previous suggestions

Suggestions up to commit 21a11f8
CategorySuggestion                                                                                                                                    Score
General
Wrap the mock initialization in a conditional block to restrict it to development mode

await initMock() should be wrapped in a conditional block to ensure it only executes
in development mode, avoiding potential issues in production environments.

src/main.ts [8]

-await initMock()
+if (import.meta.env.DEV) {
+  await initMock()
+}
Suggestion importance[1-10]: 9

Why: Wrapping await initMock() in a conditional block ensures it only runs in development mode, which is crucial for avoiding unintended behavior or performance issues in production environments. This suggestion directly improves the correctness and safety of the code.

9
Restrict the usage of setupWorker to browser environments to prevent runtime issues

Ensure setupWorker is only imported and executed in a browser environment to avoid
runtime errors in non-browser contexts.

src/mocks/handler.ts [5]

-import { setupWorker } from 'msw/browser'
+if (typeof window !== 'undefined') {
+  const { setupWorker } = await import('msw/browser')
+}
Suggestion importance[1-10]: 8

Why: Ensuring setupWorker is only executed in a browser environment prevents runtime errors in non-browser contexts, which is a practical improvement for robustness. However, the suggestion could be more explicit about handling the asynchronous import.

8
Add validation to ensure all fields in the mock data are correctly populated

Validate the sampleContestTeamDetails array to ensure all required fields are
present and correctly formatted to prevent runtime errors.

src/mocks/contests.ts [5-30]

 const sampleContestTeamDetails: ContestTeamDetail[] = [
   {
     id: 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa',
     name: 'チーム優勝',
     description: 'これはサンプルのチームです。',
     result: '優勝',
     members: sampleUsers,
     link: 'https://example.com'
   },
   ...
-]
+].filter(team => team.id && team.name && team.members && team.link);
Suggestion importance[1-10]: 7

Why: Adding validation to the sampleContestTeamDetails array ensures data consistency and prevents potential runtime errors. While useful, this improvement is not critical as the mock data is primarily for testing purposes.

7
Suggestions up to commit 0b30bc4
CategorySuggestion                                                                                                                                    Score
Possible issue
Correct the parameter name in the project handler to match the API route

The apis.getProject handler uses an incorrect parameter name contestId instead of
projectsId, which could cause runtime errors.

src/mocks/projects.ts [45]

-{ contestId: string },
+{ projectsId: string },
Suggestion importance[1-10]: 10

Why: The incorrect parameter name directly contradicts the API route and could cause runtime errors. Fixing this is critical for the functionality of the handler, making this suggestion highly impactful.

10
Ensure mock initialization is restricted to the development environment

await initMock() should be wrapped in a condition to ensure it only executes in a
development environment, as it may cause unintended behavior in production.

src/main.ts [8]

-await initMock()
+if (import.meta.env.DEV) {
+  await initMock();
+}
Suggestion importance[1-10]: 9

Why: Wrapping await initMock() in a development environment check is highly relevant and prevents potential issues in production, where mock initialization could cause unintended behavior. This suggestion directly improves the correctness and safety of the code.

9
Fix incorrect type comparison in the user groups handler

The conditional check if (params.userId === 'true') in the apis.getUserGroups
handler is problematic as it compares a string to a boolean-like value, which may
lead to unexpected behavior.

src/mocks/groups.ts [34]

-if (params.userId === 'true') {
+if (params.userId === true) {
Suggestion importance[1-10]: 8

Why: Correcting the type comparison ensures the handler functions as intended and avoids potential bugs caused by mismatched types. This is a significant improvement to the code's reliability.

8
General
モジュール解決方法の変更が予期しない問題を引き起こす可能性を防ぐ。

"moduleResolution" を "bundler" に変更した場合、特定のモジュール解決が期待通りに動作しない可能性があります。"node"
のままにするか、変更の影響を十分にテストしてください。

tsconfig.json [7]

-"moduleResolution": "bundler",
+"moduleResolution": "node",
Suggestion importance[1-10]: 7

Why: The suggestion highlights a valid concern regarding the potential issues caused by changing "moduleResolution" to "bundler". While the change in the PR might be intentional, this suggestion encourages testing to ensure compatibility, which is important for maintaining functionality.

7
ターゲットの変更による互換性の問題を防ぐ。

"target" を "esnext" に変更した場合、古いブラウザや環境での互換性が失われる可能性があります。"es2018"
のままにするか、変更の影響を十分に確認してください。

tsconfig.json [3]

-"target": "esnext",
+"target": "es2018",
Suggestion importance[1-10]: 7

Why: The suggestion raises a valid point about the potential loss of compatibility with older browsers or environments when changing "target" to "esnext". It encourages verifying the impact of this change, which is crucial for ensuring broad compatibility.

7
Populate id and displayName fields in sample accounts to avoid potential issues

The sampleAccounts array contains empty id and displayName fields, which might lead
to issues if these fields are expected to be unique or non-empty.

src/mocks/users.ts [10-16]

 {
-  id: '',
-  displayName: '',
+  id: 'unique-id-1',
+  displayName: 'Sample Display Name',
   type: AccountType.atcoder,
   prPermitted: true,
   url: 'https://sample.com'
 },
Suggestion importance[1-10]: 6

Why: Populating the id and displayName fields improves the sample data's quality and prevents potential issues if these fields are expected to be unique or non-empty. However, the impact is moderate since this is sample/mock data.

6
Suggestions up to commit 8875ad2
CategorySuggestion                                                                                                                                    Score
Possible issue
エンドポイントのパラメータ名を正しいものに修正します。

'/api/v1/projects/:projectsId' のエンドポイントで、params.contestId を使用していますが、正しくは
params.projectsId を使用すべきです。

src/mocks/projects.ts [23-40]

 http.get<
-  { contestId: string },
+  { projectsId: string },
   never,
   ProjectDetail,
   '/api/v1/projects/:projectsId'
->('/api/v1/projects/:projectsId', () => {
+>('/api/v1/projects/:projectsId', ({ params }) => {
   return HttpResponse.json({
-    id: 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa',
+    id: params.projectsId,
     name: 'sampleUser',
     description: 'sampleUser',
     duration: {
       since: { year: 2021, semester: 1 },
       until: { year: 2021, semester: 1 }
     },
     link: '',
     members: []
   })
 })
Suggestion importance[1-10]: 10

Why: 現在のコードでは、params.contestId を使用しており、エンドポイントの意図に反しています。この修正は、正しいパラメータ名 params.projectsId を使用することで、エンドポイントの動作を正確にします。

10
条件分岐でサスペンドされたユーザーを正しく含めるよう修正します。

params.includeSuspended の条件分岐で、UserAccountState.suspended のユーザーも含めるべきです。現在は
UserAccountState.active のみをフィルタリングしており、意図した動作ではない可能性があります。

src/mocks/users.ts [117-126]

 if (params.includeSuspended === 'true') {
   return HttpResponse.json(
     users
-      .filter(user => user.state === UserAccountState.active)
+      .filter(user => user.state === UserAccountState.active || user.state === UserAccountState.suspended)
       .map(user => ({
         id: user.id,
         name: user.name,
         realName: user.realName
       }))
   )
 }
Suggestion importance[1-10]: 9

Why: 現在のコードでは、params.includeSuspendedtrue の場合にサスペンドされたユーザーが含まれないため、意図した動作ではない可能性があります。この修正は、サスペンドされたユーザーを正しく含めるようにし、機能の正確性を向上させます。

9
ユーザーIDの条件チェックを正確なロジックに修正します。

params.userId === 'true' の条件は意味的に不明確であり、params.userId
が実際のユーザーIDと一致するかを確認するロジックに修正するべきです。

src/mocks/users.ts [174-185]

-if (params.userId === 'true') {
+const user = users.find(user => user.id === params.userId);
+if (user) {
   return HttpResponse.json([
     {
-      id: 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa',
-      name: 'sampleUser',
+      id: user.id,
+      name: user.name,
       duration: {
         since: { year: 2021, semester: 1 },
         until: { year: 2021, semester: 1 }
       }
     }
   ])
 }
Suggestion importance[1-10]: 8

Why: 現在のコードでは、params.userId === 'true' の条件が意味的に不明確であり、意図した動作を保証しません。この修正は、ユーザーIDが実際のユーザーIDと一致するかを確認するロジックを導入し、コードの正確性を向上させます。

8
必須の typescript 依存関係を devDependencies に追加する必要があります。

確認された依存関係の中で、mswpeerDependenciestypescript が含まれていますが、typescript
devDependencies に追加されていない可能性があります。typescript を明示的に追加してください。

package-lock.json [2878-2880]

 "peerDependencies": {
     "typescript": ">= 4.8.x"
   },
+"devDependencies": {
+    "typescript": "^4.8.0"
+  },
Suggestion importance[1-10]: 7

Why: The suggestion correctly identifies that typescript is listed as a peer dependency for msw but is not explicitly added to devDependencies. Adding it ensures compatibility and avoids potential issues during development. However, the suggestion is not critical since typescript might already be installed in the environment.

7
General
開発環境以外でモックが無効であることを明示的に通知します。

import.meta.env.DEV のチェックがない場合に setupWorker が呼び出されないため、initMock
関数が何も実行しない可能性があります。明示的にエラーをスローするか、ログを追加するべきです。

src/mocks/handler.ts [15-18]

 if (import.meta.env.DEV) {
   const server = setupWorker(...handlers)
   await server.start({ onUnhandledRequest: 'bypass' })
+} else {
+  console.warn('Mock server is not started as the environment is not development.')
 }
Suggestion importance[1-10]: 7

Why: 開発環境以外でモックが無効であることを明示的に通知することで、デバッグやトラブルシューティングが容易になります。この修正は、コードの可読性とデバッグ性を向上させますが、機能そのものには影響を与えません。

7
msw の設定で指定されたディレクトリが存在することを確認する必要があります。

msw の設定で指定されている workerDirectorypublic
となっていますが、このディレクトリが存在しない場合、エラーが発生する可能性があります。ディレクトリの存在を確認してください。

package.json [45-49]

 "msw": {
     "workerDirectory": [
       "public"
     ]
+  },
+"scripts": {
+    "prepare": "mkdir -p public"
   }
Suggestion importance[1-10]: 6

Why: The suggestion adds a script to ensure the public directory exists, which is a good precaution to prevent runtime errors. However, it is not critical as the directory might already exist or be created manually by the developer.

6
Suggestions up to commit 2ebd26c
CategorySuggestion                                                                                                                                    Score
Possible issue
Ensure await is used within an async function or module to avoid runtime errors

await cannot be used at the top level in this file unless it is within an async
function or module. Ensure the file is marked as an ES module by adding "type":
"module" in package.json or wrap the await calls in an async function.

src/main.ts [10-14]

 if (import.meta.env.DEV) {
-  const { handlers } = await import('./mocks/handler')
-  const server = setupWorker(...handlers)
-  await server.start({ onUnhandledRequest: 'bypass' })
+  (async () => {
+    const { handlers } = await import('./mocks/handler')
+    const server = setupWorker(...handlers)
+    await server.start({ onUnhandledRequest: 'bypass' })
+  })()
 }
Suggestion importance[1-10]: 9

Why: The suggestion addresses a critical issue where await is used at the top level, which is not allowed unless within an async function or module. Wrapping the code in an immediately invoked async function ensures proper execution and prevents runtime errors.

9
Add a fallback for when no user matches the userId to prevent returning undefined

The users.find call in apis.getUser may return undefined if no user matches the
userId, which could cause issues. Add a check to handle this case and return an
appropriate response.

src/mocks/users.ts [164]

-return HttpResponse.json(users.find(user => user.id === params.userId))
+const user = users.find(user => user.id === params.userId)
+return user ? HttpResponse.json(user) : HttpResponse.error(404, 'User not found')
Suggestion importance[1-10]: 8

Why: The suggestion provides a robust improvement by handling cases where no user matches the userId. Returning an appropriate error response prevents potential issues caused by returning undefined.

8
Correct the condition to properly filter based on the userId parameter

The params.userId === 'true' condition in apis.getUserProjects and
apis.getUserContests appears incorrect, as userId is likely not a boolean string.
Verify and adjust the condition to properly filter based on userId.

src/mocks/users.ts [174-183]

-if (params.userId === 'true') {
+if (params.userId === 'expectedUserId') {
   return HttpResponse.json([
     {
       id: 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa',
       name: 'sampleUser',
       duration: {
         since: { year: 2021, semester: 1 },
         until: { year: 2021, semester: 1 }
       }
     }
   ])
 }
Suggestion importance[1-10]: 7

Why: The suggestion identifies a potential logical error in the condition params.userId === 'true', which is unlikely to be correct. Adjusting the condition to check for a valid userId improves the accuracy and functionality of the code.

7
General
Ensure the specified worker directory exists and is correctly configured for MSW

msw.workerDirectory に指定された "public" ディレクトリが存在し、適切な権限が設定されていることを確認してください。そうでない場合、MSW
のワーカーが正しく動作しない可能性があります。

package.json [46-49]

+"msw": {
+  "workerDirectory": [
+    "public"
+  ]
+}
 
-
Suggestion importance[1-10]: 7

Why: The suggestion is valid and highlights the importance of verifying the existence and proper configuration of the "public" directory specified in msw.workerDirectory. This is crucial for the correct functioning of MSW workers. However, it is not a direct code change but rather a recommendation to verify the setup, which slightly reduces its actionable impact.

7

Copy link
Contributor

@Futadaruma Futadaruma left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

とりあえずモックありの環境を使ってみて、困ったところがないかなど教えてもらう感じで大丈夫です!

とのことでしたので各ページでの表示を確認しました
どのページでも正常に表示されてます
ありがとうございます!

一点だけ要変更点として、/users/:userIdのページでCTFTimeのアイコンが設定されていないので設定した方が良さそうです

@Pugma
Copy link
Collaborator Author

Pugma commented Jan 8, 2025

とりあえずモックありの環境を使ってみて、困ったところがないかなど教えてもらう感じで大丈夫です!

とのことでしたので各ページでの表示を確認しました どのページでも正常に表示されてます ありがとうございます!

一点だけ要変更点として、/users/:userIdのページでCTFTimeのアイコンが設定されていないので設定した方が良さそうです

ctftimes のアイコンについては、まだサービスとして対応できてないものなのでこれは別件の対応という感じになると思います
よさそうであれば Approve をお願いします!

Copy link
Contributor

@Futadaruma Futadaruma left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

分かりました
正常にモックが動作しているようで良さそうです

@Pugma Pugma merged commit acae638 into main Jan 8, 2025
10 checks passed
@Pugma Pugma deleted the dev/mock branch January 8, 2025 15:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

モックをまともな表示にする
2 participants