いわゆる dotfiles, シェルやエディタの設定の類を GitHub に置いてある。
リポジトリ下にあるファイルを (ホームディレクトリに) インストールする Rake タスクを定義してあるのだけれど、このタスクが期待した動作をするかテストを書きたいと思っていたので書いた。
dotfiles/test/dotfiles_test.rb at master · aereal/dotfiles · GitHub
インストール先に指定したディレクトリに symlink が存在するかどうか調べている。
Ruby の標準添付ライブラリである minitest-spec を使っている。仕様はコンパクトなのにむりやり RSpec に DSL を似せているのでちぐはぐな実装になっている。たとえば、before
/ after
メソッドに実行されるステージ (:each
など) を渡せる RSpec に似せてあるものの、minitest-spec は :each
しかサポートしておらず、それ以外の値を与えると RuntimeError を投げる。
互換性がないのだから無理に DSL を似せる必要はないと思うけれど、これで嬉しいという人もいるのかもしれない。minitest-unit のようにクラスを定義してメソッドを定義して、となると、メソッドやクラスの識別子として使える文字列という制約の中でテストの意味を表現しなくてはならなくて不毛であるので、それよりはましだと思って minitest-spec を使った。
.travis.yml はこれくらい。Rake を使って定義してあるので Ruby 1.9.3 と 2.0.0 でテストするようにしてある。よく考えたら OS X Mountain Lion までの Ruby は 1.8.7 系が入っているので、1.8.7 でもテストしてみてよい気がする。
些細ではあるけれどテストが増えたことで安心感が増した。そんなに頻繁に実行するようなものではないけれど、壊れていることに気付かないままでいると、困るのは本当に必要とするときなので余計に困ってしまう。そういう事故を未然に防ぐのが技術の役目だと思う。