RSpec2 で Shoulda の matcher を使う

RSpec でテストを書く時に、便利な matcher を定義してくれるのが Shoulda です。これの matcher を RSpec から利用する方法について(何もしないでも使えそうだったのですが、一部メソッドが undefined だと怒られてしまったので)。

まずは Gemfile を修正。

  • before
group :development, :test do
  gem 'rspec'
  gem 'rspec-rails'
  gem 'autotest'
  gem 'webrat'
end
  • after
group :development, :test do
  gem 'rspec'
  gem 'rspec-rails'
  gem 'shoulda'
  gem 'shoulda-matchers'
  gem 'autotest'
  gem 'webrat'
end

さらに Rails.root/spec/spec_helper.rb に一行追加。

# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'shoulda-matchers' # この行を追加

# 以下略

これで、以下のような書式で関連をテストするなど、便利な書き方ができるようになりました。

require 'spec_helper'
describe Category do
  before(:each) do
    @category = Category.new
  end

  it "should have many items" do
    @category.should have_many :items
  end
end