at posts/single.html

RSpec で tDiary プラグインのテストを書く

kakutaniさんのいきいきとしたレガシーコードとの暮らしを読んだ / 観た。 ちょっとRuby1.9対応に挑戦したときも、「これはプラグインのテストが無いと辛いよなぁ…」と思ったので、「テストのないコードはレガシーコード」にすごく共感した。 とりあえず、自分の作ったプラグインくらいはテストを書いておこうと思って、 RSpec を使ってみることに。

参考

まずはRubistMagazineの以下の特集を読んでお勉強。 たしか、最近のWEB+DB PRESSでも特集されていたので後で読む。

はじめの一歩

CodeRepos のtdiary-contrib置き場に spec というディレクトリがある。 ここにプラグインの spec ファイルが置かれているので、これを読んで spec の書き方を調べる。 参考にしたのは、以下のファイル。

これらを参考に、 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

まずは小さな一歩だけど、ちょっとずつ書いていこう。

関連する日記