test
Vitestで「そのファイルに関連したテスト」を書く
タイトルの方法は vitest related
という命令により可能です(vitest relatedのドキュメント)。これはファイルを指定すると、そのファイルに関連したテストを実行するものです。ちなみにJestでは –findRelatedTestsというオプションで同様の動作ができます。
関連というのはドキュメント上であまり明示されていませんが、基本的には該当のファイルをimportしたテスト、さらにimportした別のファイルをimportしたテスト、さらにimportしたやつをimportしたやつをimportしたテスト…みたいな感じで再帰的になんかいい感じに引っ張って来るようなイメージがあります。ですのでファイルによっては1ファイル指定しただけなのに何十ファイルもテスト対象になります。
例えば 派生元ブランチを取得するを利用すると、該当のブランチで編集したすべてのファイルに関連したテストを実行できます。
$ yarn test related --run $(git diff $(git show-branch | grep -e '*' -e '-' | grep -v -e '^\s*!' -e '^-' -e "$(git rev-parse --abbrev-ref HEAD)" | head -1 | awk -F'[]~^[]' '{print $2}') --name-only | grep -e '\.ts$')
# aliasで派生元ブランチの取得を `git parent-branch` とするとスッキリします
$ yarn test related $(git diff-file-from-parent | grep -e '\.ts$')
ちなみにモノレポの場合、先頭にpackages/app
みたいなパスが付与されているとファイルの指定がうまくいかないので、sed
で編集するといいです。もしくはrootオプションを利用しても良いと思います。
# aliasで派生元ブランチの取得を `git parent-branch` としています
$ yarn test related $(git diff-file-from-parent | grep -e '\.ts$' | sed 's#^packages/app/##')