酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

RSpecがさらに捗る Shoulda-matchers のマッチャ 一覧

shoulda-matchersはRSpecでのテストを強力にサポートしてくれるマッチャー集です。全米が驚くくらいの多数のmatcherがありますw
RailsのRSpecが捗りますよ^^

thoughtbot/shoulda-matchers · GitHub


導入手順

Gemfileに以下を追加して、bundle installを実行。

1
2
3
4
5
6
7
8
9
group :test do
  # 便利マッチャー集
  gem "shoulda-matchers"
end

# developmentグループにrspec-railsが必須
group :development, :test do
  gem "rspec-rails"
end

続いて、spec/spec_helper.rbに以下を追記。

1
2
3
4
5
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'shoulda-matchers' #<= 追加

マッチャー一覧

ActiveRecord

マッチャー 意味・機能
belong_to(name) belongs_toのリレーションシップが設定されていることを期待
have_one(name) has_oneのリレーションシップが設定されていることを期待
have_many(name).through(:xxx) has_manyのリレーションシップが設定されていることを期待
have_and_belong_to_many(name) have_and_belong_to_manyのリレーションシップが設定されていること、テーブルがjoinされていることを期待
have_db_column(column).of_type(:type) type(string, booleanなど)のcolumnという名前のDBカラムを持っていることを期待
have_db_index(columns).unique columnsで構成されるunique(option)なDBインデックスを持っていることを期待
have_readonly_attribute(attr) 新規作成後は変更不可なattrを持っていることを期待
accept_nested_attributes_for(name) nameにaccepts_nested_attributes_for が設定されていることを期待
serialize(attr) attrはserializeされていることを期待

ActiveModel

マッチャー 意味・機能
allow_mass_assignment_of(attr) attrが一括での更新を許可していることを期待(attr_protectedされていない)
allow_value(value).for(attr) attrはvalueを登録できること(バリデーションを通ること)を期待
ensure_exclusion_of(attr).in_range(min..max) attrが、 minからmaxまでの範囲にないことを期待
ensure_inclusion_of(attr).in_range(min..max) attrが、 minからmaxまでの範囲であることを期待
ensure_length_of(attr).is_at_least(min) attrのlengthがmin以上であることを期待
ensure_length_of(attr).is_at_most(max) attrのlengthがmax以下であることを期待
ensure_length_of(attr).is_equal_to(expected) attrのlenghtがexpectedと等しいことを期待
validate_acceptance_of(attr) attrにacceptanceバリデーションを通っている(チェックボックスのチェックが入っている)を期待
validate_format_of(attr) attrにfromatバリデーション(正規表現パターンに一致しているか)がセットされていることを期待
validate_numericality_of(attr) attrにnumericalityバリデーション(数値の大小、型をチェック)がセットされていることを期待
validate_presence_of(attr) attrにpresenceバリデーション(値が空でないか)がセットされていることを期待
validate_uniqueness_of(attr) attrにuniquenessバリデーション(値が一意であるか)がセットされていることを期待

Controller

マッチャー 意味・機能
assign_to(variable) インスタンス変数variableがセットされていることを期待
filter_param(key) paramsにキーkeyがセットされていることを期待
redirect_to(url_or_description, &block) url_or_descriptionにリダイレクトすることを期待
render_template(template) templateが描写されることを期待
render_with_layout(expected_layout = nil) レイアウトにexpected_layoutが使われて描写されることを期待
respond_with(status) statusでレスポンスが返ることを期待
respond_with_content_type(content_type) レスポンスがcontent_typeで返されることを期待
route(method, path).to(controller => :controller, action => :action) methodでpathにアスセスしたら、controller, actionにルーティングされることを期待
set_session(key).to(expected) セッションキーkeyの値がexpectedであることを期待
set_the_flash().to(expected) flashの値がexpectedであることを期待

ActionMailer

マッチャー 意味・機能
have_sent_email() 正しくメールが送付されたことを期待
1
2
3
4
5
6
7
8
9
# 例) 
it { should have_sent_email.with_subject(/is spam$/) }
it { should have_sent_email.from('do-not-reply@example.com') }
it { should have_sent_email.with_body(/is spam\./) }
it { should have_sent_email.to('myself@me.com') }
it { should have_sent_email.with_subject(/spam/).
                            from('do-not-reply@example.com').
                            with_body(/spam/).
                            to('myself@me.com') }

正直言ってオプションも含めて、完全に書ききれませんでした。
もし興味があればぜひ、rubydocを参照してみて下さい!

Module: Shoulda::Matchers — Documentation for thoughtbot/shoulda-matchers (master)

thoughtbot/shoulda-matchers · GitHub

rails-rspecのマッチャ一覧と便利機能

rails-rspecのマッチャ一覧と便利機能の紹介は、拙作のPryの秘めた力を最大限引き出す4つの拡張機能をご参照下さい!

rspecの標準マッチャ一覧

rspecの標準マッチャの一覧は、拙作のRSpecの標準matchers(マッチャー)一覧をご参照下さい!

おすすめの書籍