如何通过Docker Compose运行Rails项目engine目录下的测试用例
解决方案
方案1:通过-w参数直接指定工作目录执行(推荐)
docker-compose exec原生支持-w/--workdir参数,可以直接指定命令的运行目录,不需要进入容器交互模式,命令写法如下:
docker-compose -f docker-compose.dev.yml exec -e "RAILS_ENV=test" -w /usr/src/app/my_engine myapp bundle exec rspec
说明:你的Compose配置中已经将宿主机的
./my-app目录映射到容器内的/usr/src/app目录,因此容器内my_engine的完整路径为/usr/src/app/my_engine,直接对应即可。
方案2:拼接Shell命令执行
如果不想写全路径,也可以直接在exec中执行组合Shell命令,先切换目录再执行测试:
docker-compose -f docker-compose.dev.yml exec -e "RAILS_ENV=test" myapp sh -c "cd my_engine && bundle exec rspec"
如果你的Engine有独立的Gemfile,建议在命令中增加bundle install步骤避免依赖缺失:
docker-compose -f docker-compose.dev.yml exec -e "RAILS_ENV=test" myapp sh -c "cd my_engine && bundle install && bundle exec rspec"
方案3:预设专用测试服务(适合高频使用场景)
如果需要频繁执行Engine测试,可以直接在docker-compose.dev.yml中新增专属服务配置,简化后续调用:
myapp-engine-test: image: my-app build: dockerfile: Dockerfile-dev context: my-app volumes: - ./my-app:/usr/src/app - gem_data:/usr/local/bundle:cached depends_on: - db - redis user: root environment: - RAILS_ENV=test working_dir: /usr/src/app/my_engine command: bundle exec rspec
后续需要执行测试时只需要运行以下命令即可:
docker-compose -f docker-compose.dev.yml run --rm myapp-engine-test
内容的提问来源于stack exchange,提问作者guiddoo
相关产品推荐
相关产品推荐

