【Ruby on Rails7】RSpecおよびshoulda-matchersのインストール

この記事では、Ruby on Rails7にテストプログラムのRSpecと、その簡略化記法shoulda-matchersを導入します。

目次

RSpecおよびshoulda-matchersの導入

Gemfileに追記しインストール

まずはGemfileに追記します。

group :development do
  gem 'rspec-rails'
end

gem "shoulda-matchers"

コマンドラインで、

bundle install

インストールします。

さらに、

bundle exec rails g rspec:install

RSpecをインストールします。

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は単純なエラーでも数行かかるので、そうではないエラーとの見分けがつくのは助かります。参考リンク

こちらを参考にさせていただきました。ありがとうございます。

本家サイト。
下部に使用できるテスト内容が書いていますが、かなり豊富に用意されていますね。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA

目次