Open4

MSWを用いたgrpc-webのmockについて

kiddiknkiddikn

使用例はこの辺を見るのが一番分かりやすい
https://zenn.dev/takepepe/articles/storybook-driven-development#【3】templates%2Fusercreate
https://zenn.dev/takepepe/articles/reusable-story-playfn#msw-の再利用

MSW を使うと、Storybook でも Http リクエストのインターセプトが可能になります。表示しただけで Http リクエストが飛んでしまうコンポーネントに MSW は便利です。今回のサンプルはフォームを送信するものなので、正常系・異常系を再現できる handler を用意・2つの Story を export します。

kiddiknkiddikn

storybook側のmswを利用するためのaddon

https://storybook.js.org/addons/msw-storybook-addon

  • storyのparametersにmswのhandlerを記述することができる

  • ほぼ全コンポーネントで使用されているhandlerはpreview.jsに記述することでバンドルされる

    Suppose you have an application where almost every component needs to mock requests to /login and /logout the same way. You can set global MSW handlers in preview.js for those requests and bundle them into a property called auth, for example:

  • もちろんhandlerは以下のような形を持っているので、各コンポーネントでpreview.jsのmockを上書きも可能(disableにするときは各コンポーネントでnullを渡す)

    type MswParameter = {
      handlers: RequestHandler[] | Record<string, RequestHandler | RequestHandler[]>
    }
    
kiddiknkiddikn

本題として、mswはgrpc-webのreq/resを表現できるのか?
https://github.com/mswjs/msw/issues/238

結論で言うと、mswはhttpを受け付けてmockを返しているので、適切にreq/resをエンコード/デコードできればできそう

今のところはmsw側でこの辺りを面倒見てないようだが、protoファイルを読み込めるなら普通にレスポンスを設定して↓を使ってエンコードしたresponseをmswの戻り値にするので使える気がする(←試したいこと)
https://zenn.dev/link/comments/ee89092f84b746