Shoulda Matchersでテストを簡潔にしよう

作成者: Ana Schwendler, @anaschwendler

このガイドは Rails Girls アプリ・チュートリアル 及び Rspecチュートリアル 、そして コメント機能チュートリアル を完了して、Rails Girlsアプリが作成済みの方を対象にしています。

Shoulda Matchers はRubyのテスト用Gemで、Railsの一般的な機能テストをRSpecとMinitest互換のワンライナーにします。こちらを使用しない場合機能テストはより冗長で複雑になり、エラーが起きやすくなるでしょう。

Help from the coach

テストと振る舞い駆動開発について説明してください。

1. Shoulda Matchers gemを追加する

Gemfileを開いて:test グループのendタグの上に以下の行を追加します。

group :test do
  ...
  gem 'shoulda-matchers'
end

そしてgemをインストールする為に以下のコマンドを実行してください。

bundle install
Help from the coach

ターミナルの出力内容をgoogle検索して、結果について説明してください。

2. rails_helper.rbを修正する

今回のケースでは、RSpecを利用してプロジェクトをテストするので、rails_helper.rb にShoulda Matchersを使用することを記述する必要があります。

最後のendタグの上に配置してください(インデントも確認してください)

  Shoulda::Matchers.configure do |config|
    config.integrate do |with|
      # テストフレームワークを選択:
      with.test_framework :rspec
      with.library :rails
    end
  end
Help from the coach

なぜrails_helper.rb内のGemの記述を修正しているのか説明してください。

ターミナル上で以下のコマンドを実行してください。

rspec spec/models/idea_spec.rb

テストが正常に動作していることが表示されるはずです。

3. テストしましょう!

Shoulda Matchersを使ったテストはとても簡単です。 最初のテストはRails Girls アプリのコメント機能で既に記述した、「ideaは複数のcommentを所有することができること」についてです。

これが正しく動作しているかをどうかをテストする為には、spec/lib/idea_spec.rb内の最初に作成したテストケースの真上に、以下の行を追加します。

  describe "associations" do
    it{ is_expected.to have_many(:comments) }
  end

これは関連付けのテストです。

Help from the coach

関連付けのテストについて説明してください。

4. テスト駆動開発

Help from the coach

テスト駆動開発と、テストから始めるアプリの機能開発について説明してください。

私たちがアプリに追加出来るもう一つの機能は、ideaに常に名前を付けられるようにすることです。どうすればそのような機能を実装できるのでしょうか?まずideaには必ず名前があるということから始めてみましょう。

それでは対象のテストを作ることから始めましょう。spec/lib/idea_spec.rbに次の行を追加します。

  describe "validations" do
    it{ is_expected.to validate_presence_of :name }
  end

この行を関連付けテストの下に追加してください。

そしてターミナル上で以下のコマンドを実行します。

rspec spec/models/idea_spec.rb

これは適切なバリデーションが行われていないことを示しています(実際にバリデーションしていません)。 そこで、次の行をモデルに追加してideaにnameが存在することを検証する必要があります。

  validates :name, presence: true

この行をhas_many文の下に追加してください。

そして、ターミナルに戻って以下のコマンドを実行します。

rspec spec/models/idea_spec.rb

正常な結果が返ってくるはずです。

5. 自分で進めてみよう!

このチュートリアルの続きとして、ideaの説明(description)の存在を検証するテストを行うことが出来ますか?

他のテストケースを作る想像ができますか?

それでは善いテストを!


もっと学びたいですか? 他のガイドも見てみましょう!