RSpec で tDiary プラグインのテストを書く
kakutaniさんのいきいきとしたレガシーコードとの暮らしを読んだ / 観た。 ちょっとRuby1.9対応に挑戦したときも、「これはプラグインのテストが無いと辛いよなぁ…」と思ったので、「テストのないコードはレガシーコード」にすごく共感した。 とりあえず、自分の作ったプラグインくらいはテストを書いておこうと思って、 RSpec を使ってみることに。
参考
まずはRubistMagazineの以下の特集を読んでお勉強。 たしか、最近のWEB+DB PRESSでも特集されていたので後で読む。
はじめの一歩
CodeRepos のtdiary-contrib置き場に spec というディレクトリがある。 ここにプラグインの spec ファイルが置かれているので、これを読んで spec の書き方を調べる。 参考にしたのは、以下のファイル。
- my_hotentry_spec.rb … 自分で書いたテストが kakutani さんによって spec 化されてる!
- youtube_spec.rb … 初期化処理が参考になる。
これらを参考に、 spec/flickr_spec.rb を書いてみた。
$:.unshift(File.dirname(__FILE__)) require 'spec_helper' describe "Flickr" do before do @plugin = fake_plugin(:flickr) @plugin.conf['flickr.apikey'] = "dummy" end describe "#flickr" do it "存在しない photo_id を指定するとエラーになること" do @plugin.flickr(0).should be_include("[ERROR]") end end end
実行してみる。
$ spec spec/flickr_spec.rb . Finished in 0.080556 seconds 1 example, 0 failures
分かったこと
- テストは spec ディレクトリより一つ上で実行する。でないとプラグインがロードされない。
- spec_helper に、PluginやCGIのダミーが用意されている。
- プラグインは plugin = fake_plugin(:プラグイン名) でロードする。
- conf ファイルは plugin.conf['flickr.apikey'] で設定する。
ちなみに、 spec_helper には add_edit_proc が用意されていなかったので、空の add_edit_proc を定義しておいた。本当はどうすればいいのか分からない。
Index: spec/spec_helper.rb =================================================================== --- spec/spec_helper.rb (リビジョン 22188) +++ spec/spec_helper.rb (作業コピー) @@ -87,6 +87,9 @@ r.join.chomp end + def add_edit_proc + end + class Config attr_accessor :index, :html_title, :cgi
まずは小さな一歩だけど、ちょっとずつ書いていこう。