Ruby
Rails
RSpec
Railsチュートリアル

RailsチュートリアルでRSpecを使用する前に知っておきたいこと


はじめに

こんにちは!先日Railsチュートリアルを完走したばかりの初心者です。

私はRalisチュートリアルを開始する際にRSpecを使用すべきか悩みました。

本記事では私が当時知りたかったRSpecについての情報をまとめております。

導入を検討されている方のお役に立てればと思います。

※本記事ではRSpecの導入方法については記載しておりません。

 導入方法をお探しの方は以下の記事が参考になるかと思います。

 ○RailsアプリへのRspecとFactory_botの導入手順


RSpecとは

RSpecとは、RubyでBDD (ビヘイビア駆動開発) を実施するためのテストフレームワークです。

プログラムのふるまいを記述するためのドメイン特化言語(DSL)を提供します。

簡単に言うとRSpecは「プログラムのふるまいをコードで記述して、正しく動作しているか確認するテストフレームワーク」です。

RSpecの特徴として、書き方が特殊であるため学習コストが高いと言われていますが、習得後はかなり直感的にテストが書けるようになります。

また、Railsを扱う多くの企業で採用されており、Rubyのテストフレームワークのデファクトスタンダードとなりつつあるため、Railsエンジニアになる上で避けて通れないものになっているようです。


RSpecとMiniTestの違い


Rspecの特徴

・DSLで記述

・DSLであるためロジックの自由度が低い

・学習コストが高い

・採用している企業が多い

・情報が豊富

・最初から様々な機能が入っていて便利


MiniTestの特徴

・純粋なRubyで記述

・Rubyの言語機能が使えるためロジックの自由が高い

・学習コストが低い

・Railsの標準のテストフレームワークとして採用されている

・採用している企業が少ない

・情報が少ない

・実行速度が早い(RSpecと体感で違いがある程ではない?)

・複雑なテストを行う場合、多くのプラグインが必要となる


RailsチュートリアルでRSpecの使用が推奨される方

下記に該当する方はRSpecの使用を推奨します。

 ○Railsチュートリアルが2周目以降の方

 ○Web系他言語の経験があり、そのテストフレームワークを習得している方

上記以外の方については、Railsチュートリアルで採用されているMiniTestをそのまま学習されることをオススメします。

1つ目の理由としては、Railsチュートリアル自体の難易度が高く挫折する可能性が高いためです。初心者である場合、Railsチュートリアルの1周目は内容を追うだけで手一杯になりがちです。また、RSpecを導入する場合Gemを追加する必要があり、互換性の問題で苦しむ可能性もあります。

2つ目の理由は、RailsチュートリアルをMiniTestで実施したとしても、テストの流れや考え方は変わらないため習得した知識が無駄にならないためです。MiniTestで学習した内容はRSpecを使用する際に確実に活きてきます。また、RSpec習得後でも簡単なテストはシンプルなMiniTestで行う人もいます。


RailsチュートリアルをRSpecで進める際の心構え

最も大事なことは完璧主義にならないことだと思います。

Railsチュートリアルに記載されているMiniTestのコードのロジックをそのままRSpecで再現することは難しいです。MiniTestとRSpecではテストの分類が異なります。(例えばMiniTestのIntegrationテストは、RSpecではRequestテストとFeatureテストで分けて実施することになるかと思います。)

テストをRSpecに置き換える際は、「何を検証するためのテストなのか」を意識して柔軟にテストロジックを構築していくことを推奨します。


知っておきたかったRSpecのこと


RSpecのテストの種類


Model テスト

Modelに関連するテストを行う。

・モデルの状態が有効(valid)となっているか。

・バリデーションによりモデルの状態が無効となるか。

・クラスメソッドとインスタンスメソッドの動作。


Request テスト

ルーティングを含めたコントローラー、モデル、ビューを通したテストを行う。

また、リクエストに対して正しいレスポンスが返されることを確認する。


Controller テスト

アクセス権限の正当性を確認する。

Requestテストへの置き換えが推奨されているみたいなので、

あまり使わない方がいいかも。


Feature テスト

ブラウザ上の動作をシミュレートして動作結果を検証する。(ボタンクリックやフォーム入力などをシミュレートする)

一般的な統合テストに該当する。

Systemテストに置き換えることが可能。

使用するためには「Capybara」というGemをインストールする必要があるので注意。


System テスト

Rails 5.1から使用可能となった統合テスト。

役割はFeatureと同じ。

主にModel、Request、Featureテストを使用すれば、Railsチュートリアルは完走可能だと思います。


RSpecの学習で使用した記事

以下の記事がRSpecの使用方法を大変分かりやすく解説してくださっています。

 ○使えるRSpec入門・その1「RSpecの基本的な構文や便利な機能を理解する」

実際にRailsチュートリアルをRSpecでテストしている方の記事です。

詰まった時に参考にすると良いと思います。

 ○Railsチュートリアルの第4版をRSpecでテスト-1


さいごに

Railsチュートリアルの2周目行う方は、是非RSpecを導入してみてください。

記法を覚えるのは大変ですが、それに見合うリターンはありますし、Railsチュートリアルもより楽しいものになります!