Docker 環境であっても コンテナが気軽に増設できるなら guard-rspec を立ち上げてもいい
今回は ShellScript で何とかするパターン
ゴール
docker compose up
で立ち上げたコンテナ内で、rspec
を実行したい
- ローカル環境で
*_spec.rb
ファイルを更新したら、そのテストを実行したい
ShellScript を書く
watch_rspec.sh
, rspec.sh
の2ファイルを用意
fswatch -0 -e ".*" -i "\.rb$" --event=Created spec | while read -d "" path; do
clear
./rspec.sh $path
done
set -e
target=$(echo $1 | awk -F 'my_project_root_dir/' '{print $2}')
container=app
echo $target
docker compose exec -e RAILS_ENV=test $container bundle e rspec $target
メモ
fswatch
-0
でヌル文字区切りでファイルパスを渡す
--event=Created
で「ファイルが作成された」ものを絞り込んで検出する
-e ".*"
で一旦すべてのファイルを監視対象から除外
-i "\.rb"
で Ruby ファイルのみを監視対象にする
rspec.sh
fswatch
から渡されるファイルパスは ローカル環境のフルパスなので... awk
で加工して、プロジェクトディレクトリ以降のパスを渡す
→ docker compose exec
に渡すときにコンテナ内のファイルパス指定と等価になる
Links