這是一個關于@mswjs/data.toHandlers 函式的默認行為的問題,使用這個例子和@mswjs/data 為 RTK-Query 呼叫創建模擬。
https://codesandbox.io/s/github/reduxjs/redux-toolkit/tree/master/examples/query/react/mutations?from-embed
檔案 src/mocks/db.ts 使用@mswjs/data 創建一個模擬資料庫,并使用定義默認的 http 模擬回應,...db.post.toHandlers('rest')但如果我洗掉額外的 PUT 和 POST模擬,則無法作業。
我的理解是,@mswjs/data toHandlers() 函式根據 github 檔案默認為定義的資料庫(在本例中為 Posts)提供 PUT 和 POST 模擬 API 呼叫,因此我正在尋求建議以更好地理解為什么 toHandlers 不起作用本例中的 PUT 和 POST。即,如果我洗掉 PUT 和 POST 模擬 API 呼叫,它們將失敗。
手動 PUT 和 POST API 模擬做了哪些默認 toHandlers 不做的事情?
uj5u.com熱心網友回復:
您說.toHandlers()生成POST /posts和PUT /posts/:id請求處理程式是正確的。由于以下原因,RTK-Query 示例顯式添加了這些處理程式:
- 通過基于
Math.random()處理程式中的值回傳錯誤回應來模擬片狀錯誤行為。 - 要設定
id主鍵nanoid()。
如果洗掉顯式POST /posts處理程式,則添加帖子將失敗,因為 的模型定義post 未定義id主鍵的初始值。您不能在不提供主鍵的情況下創建物體,該示例沒有:
// PostManager.tsx
// The "post" state only contains the name of the new post.
const [post, setPost] = useState<Pick<Post, "name">>(initialValue);
// Only the "post" state is passed to the code that dispatches the
// "POST /posts" request handled by MSW.
await addPost(post).unwrap();
如果我們省略隨機錯誤行為,我認為該示例應該用作模型描述中屬性nanoid的初始值id:
import { nanoid } from "@reduxjs/toolkit";
const db = factory({
post: {
- id: primaryKey(String),
id: primaryKey(nanoid),
name: String
}
});
這樣你就可以通過提供name唯一的來創建新帖子。所述的值id將使用值消氣部件的被生成的主鍵nanoid的功能。
即使您洗掉了顯式PUT /posts/:id請求處理程式,后期編輯操作也能正常運行,因為與POST處理程式不同,該處理程式PUT 僅用于實作易斷的錯誤行為(在路徑引數中提供了已編輯的帖子 ID:)req.params.id。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/385183.html
下一篇:有沒有辦法模擬茉莉花間諜的功能
