herokuCIでrailsのrspecを行う

2 min 77 views
muraoka

muraoka

pixiv、nanaでプロダクトマネージャーを経験。
現在はマーケティングやwebサービス開発のコンサルティングを行っています。

FOLLOW

herokuCIでrailsのテスト(rspec)を回したいなと思ったんですが、意外と設定に戸惑ったのでメモ。

やりたいこと

下記の構成でテストを回せるようにする。

  • rails
  • rspec
  • heroku ci

deployするたびにherokuCIでテストが回るようにする。

やったこと

  • githubとの連携
  • review appを作成
  • herokuCIの設定( https://devcenter.heroku.com/ja/articles/heroku-ci )
  • pipelineのherokuCIで環境変数を設定
  • test用のdbはapp.jsonで設定

app.jsonの設定

app.jsonでdbの設定をする。

{
  "environments": {
    "test": {
      "addons": ["heroku-postgresql"],
      "scripts": {
        "test-setup": "bin/rails db:migrate db:seed",
        "test": "bundle exec rspec"
      }
    }
  }
}

上記はseed情報をいれて、addonも設定している。

https://devcenter.heroku.com/ja/articles/heroku-ci#add-ons

in-dynoといってtest用のプランがあるが、設定しなくても勝手にそのプランになる。一時的にdbが作成され、testが終わると破棄される。

詰まったところ

herokuCIの環境変数設定

RACK_ENV,RAILS_ENVはtestに設定。review app自体はproductionで設定。review appは最初developmentなのかなと思ったが、developmentだとconfig.web_console.whitelisted_ipsでip制限に引っかかる。まあ、消してしまえばいよかったんだがproductionにする方向で。

もし別DBを設定するなら

何かしらの理由でtest用の一時的なDBではなく、本番でも使えるDBをtestに使う場合。

testの際にdbを削除できるようにDISABLE_DATABASE_ENVIRONMENT_CHECKを1に

testの際にはdbを毎回削除するのでDISABLE_DATABASE_ENVIRONMENT_CHECKを1にしておく。これがないとdbが削除できないようになっている。これは絶対にtest環境以外では設定しないように。これを設定しているとdbのデータが壊れるのでこの環境変数を設定している環境でのdbは必ず使い捨てのものに

DBを消してもいいものに

herokuだとheroku postgresがappごとに契約できる。testのdbは削除できる使い捨てのものがいいのでreview appのものを設定している。(これは好み

javascript(webpacker)のbuildpackを使う場合

compileのエラー

なぜかrubyのbuildpackのみではtestを実行できなかった。エラー内容としてはcompileのエラー。compileを都度してほしいとのことでこの辺buildpackでなんとかしてくれそうだがrubyだけだと難しいのでnodeのbuildpackも設定。

下記のapp.jsonにてテストのコマンドを実行

{
  "environments": {
    "test": {
      "scripts": {
        "test": "bundle exec rails webpacker:compile",
        "test": "bundle exec rspec"
      }
    }
  },
  "buildpacks": [
    {
      "url": "heroku/nodejs"
    },
    {
      "url": "heroku/ruby"
    }
  ]
}

rubyを後にして最終的にはrubyで終わるようにする。上記でbuildpackの設定とrspecの前にcompileを実行するようにコマンドを設定する。

muraoka

muraoka

pixiv、nanaでプロダクトマネージャーを経験。
現在はマーケティングやwebサービス開発のコンサルティングを行っています。

FOLLOW

タグ:
関連記事