RemixとVitest
Remixで素振りしてて、テストの置き方が気になった。
go書いてると、ディレクトリはどうあれ
your_code.go
your_code_test.go
ruby書いてると
./app/your_code.rb
./spec/your_code_spec.rb
みたいに配置するのがほとんどだと思う。
一方でvitestのDocには
By default, tests must contain ".test." or ".spec." in their file name.
https://vitest.dev/guide/#writing-tests
で、 your_code.test.tsx
みたいになる。
それを踏まえてgoみたいに一緒に置いておこうとすうると
app/routes/your_code.tsx
app/routes/your_code.test.tsx
となり、テストとして置いたファイルが /your_code/test
みたいなrouteと認識されてしまう。
もちろんtestとして書いたファイルはrouteとしては不正(componentをdefault exportしてないし)なのでおこられる。そこで、
This is an array of globs (via minimatch) that Remix will match to files while reading your app/routes directory. If a file matches, it will be ignored rather than treated like a route module. This is useful for ignoring CSS/test files you wish to colocate.
https://remix.run/docs/en/main/file-conventions/vite-config#ignoredroutefiles
このオプションを使えばテストコードをテスト対象の隣に置いてもOK
export default defineConfig({
plugins: [
// https://remix.run/docs/en/main/guides/vite#plugin-usage-with-other-vite-based-tools-eg-vitest-storybook
!process.env.VITEST &&
remix({
ignoredRouteFiles: ["routes/*.test.tsx"], // これ
}),
tsconfigPaths(),
],
});
公式のテンプレート(Blues, Indie, Grunge)では app/utils.test.ts
はあるけど app/routes/
以下にはテストがなくてどう配置するかのopinionはあえて表明していないのかもしれない