pinzolo/rails-flog の Rails4.2でのテストが落ちてて、でも動いてるしーで放置してしまってた。
んで、ちゃんとしないとと思って調べてみたら、テストを壊していたのはテストコード(と自分の思い込み)だった。
具体的には mocha というモックライブラリを使用していたんだけど、スタブ作ったらテストケースをまたいで存在し続けるのを、テストケースセーフだと思い込んでいた。以前のバージョンではシーケンシャルにテストが行われていたけど、ランダムになったのでテストが落ちるようになった。
どうりでローカルでテストすると時々によってエラーの数が違うわけだ。
んで、minitest にもモック・スタブ機能があることを知り、ブロックでの影響範囲を限定できるのでこっちのほうがいいじゃん!!と mocha を削除し minitest のスタブに統一した。
ここまで前置き
ローカルでテスト通ったーと喜んで push すると travis でコケる。
Ruby1.9&Rails3.2ではstubなんてないよと怒られ、Ruby2.2&Rails3.2では 'minitest/autorun'がないと怒られた。
Ruby1.9に同梱されている minitest には minitest/mock がまだ存在していなかったらしい。
調べてみると明示的に最新の minitest を使うのが良いらしく、gemspec に足してみた。
するとこんどは Rails3.2で軒並みコケた。
警告も出てるし、いくつか試行錯誤してRails3.2では minitest のバージョンを 4.7.x となるように指定したら、今度はRuby2.2の時だけtest-unitが足りないと言われる。
そういや削除されたんだったっけ。
これでようやく全部通った。なまじ同梱されてるから環境の差分を調整するのはしんどい。
2015/11/16
2013/11/23
Redmine のプラグインを Travis で CI してみた
Redmine のプラグインの場合、プラグイン本体のみ Github に登録しているので、そのままでは Travis で CI することができない。
諦めていたんだけど、.travis.yml のオプションとにらめっこしたらなんとなく出来そうな気がしたので試してみた。
10数回の試行を経て、なんとか出来たのでスクリプトを紹介します。
.travis.yml
before_installがあるので、after_installがあるかと思ったらなかった。before_install.sh
gem インストール前に実行させるスクリプト。
Travis ではbundle install前に直下のGemfileがBUNDLE_GEMFILE環境変数に登録されてしまう。
しかし、指定したいのはプラグインのGemfileではなく、Redmine のものなのである。
なので、mvしまくりでなんとかディレクトリ構成を整えた。苦労した。
Redmine のダウンロード URL がバージョンだけに依存してくれないのが少し残念。exec_test.sh
テスト実行用スクリプト。
前述のとおりafter_installがなかったので、bundle install後の処理(Redmineの初期化など)とテストの実行を同時にすることにした。
こちらはそんなに苦労しなかった。
これで、プラグインを複数バージョンの Ruby でテストすることができるようになった。
でも、複数バージョンの Redmine でテストすることは当然できない。
複数バージョンの Redmine を対象にテストするなら Jenkins 使うのがいいんだろうな。
登録:
投稿
(
Atom
)