vitestでテスト対象のパスに$が含まれている場合バックスラッシュでエスケープする

ushironoko
·

remix等フレームワークでは、パスに動的なパラメータを含む場合、それを `$` で表記する。(e.g. `app/routes/foo_.bar_.$id/route.tsx`)

このrouteファイルのテストを仮に `route.test.tsx` とした場合、vitestで対象ファイルのみをテストする際に `$id` 部分が消えてテストができない。

```

❯ npm run test app/routes/foo_.bar_.$id/route.test.tsx

> test

> vitest run app/routes/foo_.bar_./route.test.tsx

RUN v0.33.0 /Users/ushironoko/work/dev/remix-samples

filter: app/routes/foo_.bar_./route.test.tsx

include: **/*.{test,spec}.?(c|m)[jt]s?(x)

exclude: **/node_modules/**, **/dist/**, **/cypress/**, **/.{idea,git,cache,output,temp}/**, **/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*

watch exclude: **/node_modules/**, **/dist/**

No test files found, exiting with code 1

```

おそらく内部的に正規表現でルートマッチを行っており、その際に `$` が処理されてしまうのだろう。`$` の前にバックスラッシュをつけることで、テストを通すことができる。

```

❯ npm run test app/routes/foo_.bar_.\$id/route.test.tsx

> test

> vitest run app/routes/foo_.bar_.$id/route.test.tsx

RUN v0.33.0 /Users/ushironoko/work/dev/remix-samples

❯ |dom-test| app/routes/foo_.bar_.$id/route.test.tsx (1)

```