RSpecおよびshoulda-matchersの導入
Gemfileに追記しインストール
まずはGemfile
に追記します。
group :development do gem "rspec-rails" end gem "shoulda-matchers"
コマンドラインで、インストールします。
bundle install
さらに、RSpecをインストールします。
bundle exec rails g rspec:install
shoulda-matchersの設定
spec/rails_helper.rb
の最後に、
Shoulda::Matchers.configure do |config| config.integrate do |with| with.test_framework :rspec with.library :rails end end
を追記します。
使用方法
モデルにRSpecテストプログラムを導入
以下のコマンド実行します。
(Userはモデル名の例。)
bundle exec rails g rspec:model User
次に、spec/models/user_spec.rb
の、
pending 'add some examples to (or delete) #{__FILE__}';
を削除します。
shoulda-matchersの一例
先ほど変更したspec/models/user_spec.rb
に追記します。
it { is_expected.to validate_presence_of :shain_no } it { should have_db_index(:shain_no).unique }
上記はshoulda-matchersのの記法例です。RSpecでは一つのエラーを実現するだけでも、(ダミーデータを作成するなど)数行かかるのですが、1行で済みます。
テーブルusersには、shain_noがあり、idの他にこの項目でもユニークになっていないといけないとします。
当然ながら入力必須です。
もし、モデルuserに何もせってせず、このまま、下記のコマンドを実行すると、
bundle exec rspec spec/models/user_spec.rb -f d
2件エラーになるはずです。
そこでバリデーションを、app/models/user.rb
に追記します。
validates :shain_no, presence: true, uniqueness: true
下記のコマンドを実行すると、
bundle exec rspec spec/models/user_spec.rb -f d
エラーはなくなり、さきほどの2件は成功となるはずです。
shoulda-matchersのできること、できないこと
shoulda-matchersについて
shoulda-matchersはモデル用の省略記法のようですので、単純なエラーの記述の冗長化を防ぐことができます。
RSpecは単純なエラーでも数行かかるので、そうではないエラーとの見分けがつくのは助かります。
こちらを参考にさせていただきました。ありがとうございます。
本家サイト。
下部に使用できるテスト内容が書いていますが、かなり豊富に用意されていますね。