気まぐれメモランダム / でたらめフィードバック

最近のエントリ

生き延びるための術は - KORG Gadget新曲"Suffering (unwanted but unavoidable)"公開

公開:

――どこにある?

Suffering (unwanted but unavoidable)(Processing study)

KORG Gadgetでの新作、"Suffering (unwanted but unavoidable)"を公開しました。お聴きいただければ幸いです。

すべての権力者はただちに民衆への暴力行使を停止せよ。
殺すな、精神的にも肉体的にも。


エントリを表示

TanStack Routerの単体テストで警告を出さない方法を確認する

公開:

構想を温めていた小品の新作自作Webアプリに手を付け始めました。

新作はクライアントサイドでルーティングを行うのでルーティング用ライブラリが必要です。定番は古くからあり私も別アプリで使っているReact Routerかと思いますが、次の理由から今回は見送り。

  • breaking changeにたびたび巻き込まれてあまりいい印象がない
  • Remixとの統合を果たすv7のリリースが間近で安定するまで少し時間がかかりそう

代わりに世評の高いTanStack Routerを試してみることにしました。

TanStack RouterはFile-Based Routing推奨とのことなので素直に従ってみたところ、型推論や補完が強力に働いて感心することしきり。しかしルーティングってそんなに変わるものでもないので、労力のかけかたは少し疑問に思わないでもないです。

単体テストも簡単に書けます。TanStack RouterのFile-Based Routingは routeTree.gen.ts というファイルを生成するので、そのファイルを参照する RouterProvider コンポーネントを普通にレンダリングすればよし。ただ同コンポーネントは非同期処理を多用しているようで、Testing Libraryrender関数でレンダリングするとお馴染み?の警告メッセージnot wrapped in act(...)が大量に出力されます。

Warning: An update to MatchInnerImpl inside a test was not wrapped in act(...).

非同期処理が落ち着いてからテストコードが実行されるようにすればよいわけですから、render関数をwaitFor関数でラップすれば出なくなります。次のように関数化しておくと便利でしょう。


import { RouterProvider, createRouter } from '@tanstack/react-router'
import { render, waitFor } from '@testing-library/react'
import { routeTree } from './routeTree.gen'

const setup = async () => {   await waitFor(() => {     render(<RouterProvider router={createRouter({ routeTree })} />)   }) }

これで新作アプリ開発の課題をひとつ解決。まだまだ先は長い……


エントリを表示

Pick up work

最近のエントリ

アーカイブ

ブログ情報