RSpecでテストを書く

Rubyのテストでは、RSpecを使うと幸せになれます。
HelloWorld的な事は Rubyist Magazine - スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編) を順に試せばいいと思います。

インストール

$ sudo gem install rspec --format-executable

ruby1.9 と 1.8 を、program-suffix つけて共存させてるような人は、こんなふうに --format-executable オプションを付けておくと、 spec コマンドが 「spec1.9」という名前になって、1.8 の rspec と喧嘩しないようになります。

テストを書いてみる

こんな感じのテストを「spec/array_spec.rb」という名前で保存。
RSpecの文法については このへん を参照。

describe Array, "when empty" do
  before do
    @empty_array = []
  end

  it "should be empty" do
    @empty_array.should be_empty
  end

  it "should size 0" do
    @empty_array.size.should == 0
  end

  after do
    @empty_array = nil
  end
end

テスト実行

$ spec --colour spec/array_spec.rb
..

Finished in 0.047232 seconds

2 examples, 0 failures

テスト通りました。 --colour をつけておくと、テストが失敗したら文字が赤色になったりしていい感じです。

Rake と組み合わせる

いちいち spec コマンドとか打ってらんないので、 Rake からテストを実行できるようにしてみたいと思います。
以下を Rakefile という名前で保存します。

require 'rake'
require 'spec/rake/spectask'

desc "Run all specs"
task :spec do
  Spec::Rake::SpecTask.new do |t|
    t.spec_files = FileList['spec/**/*_spec.rb']
    t.spec_opts = ['--options', 'spec/spec.opts']
  end
end

それから、 spec/spec.opts というファイルを作って以下を書き込みます。

--colour
--format specdoc
--loadby mtime
--reverse

これらは spec コマンドの起動時に与えるオプションです。
詳しい説明は省きますが、これらを指定しとくと出力が見やすかったりします。
参考: RSpecでテストコードを書いたまとめ - (゚∀゚)o彡 sasata299's blog

準備ができたら rake を実行してみましょう。

$ rake spec

結果は以下。色もついてるし、えも言われぬ多幸感が得られますね……!!
f:id:mirakui:20090822155419p:image