【RSpec】RSpecの基本を0から学んでみた。RailsJavaScriptPythonVue.jsRubyブロックチェーンHTML/CSSデザインCLOSEWebの技術は、無限大HOMERuby【RSpec】RSpecの基本を0から学んでみた。tty007【RSpec】RSpecの基本を0から学んでみた。ツイートシェアはてブLINEPocketRubyやRails開発をしていると一度は目にしたことがある「RSpec」ですが、その存在は認知していたものの、時間を取って体系的に勉強したことがなかったので今回の記事を機会に一度まとめて見ようと思い本記事を執筆しています。現場等に入らないと実際の所使う機会は無いですし、特に初学者だとテストは後回しにしがちなので滅多に触れることは無いでしょう。テストが出来るのと出来ないのではスキルもそうですが適切な場面において適切な開発が出来ず、開発効率に差が出てしまうのも事実です。「0から」とタイトル通り、今回はその「RSpec」について基本中の基本を初めからまとめていこうかと思います。スポンサードリンク目次RSpecとはRSpecのインストールと実行方法RSpecのシンタックスまとめRSpecとはそもそもRSpecとは何なのでしょうか。提供するフレームワークとして説明されています。これまでのRailsのテスト駆動開発で使われてきた「Test::Unit」を代替するフレームワークでもあります。以前のRailsに触れたことがないので僕はここら辺の変遷があまり実感できないのですが、とりあえず簡単に言うと「プログラムの動きを確認するためのフレームワーク」みたいです。ドメイン特化言語(DSL)とは、特定のタスク向けに設計されたコンピュータ言語の事です。テスト専用みたいなイメージを持ってもらえれば大丈夫かと思います。現在Rails開発においてはRSpecのスキルが「必須」としている現場も多いようで、Railsエンジニアになるためにはどうやら避けては通れない道の様です。TDD(テスト駆動開発)についてRSpecはTDDにおいて利用します。TDDとはテストファーストな開発方法であり、以下の様な手順で開発を進めます。1.テストコードをプログラムの意図に反する様に書き、それが失敗する事を確認する(レッド)2.テストコードをプログラムの期待した結果に沿う様に書き、それが成功することを確認する(グリーン)3.レッドにならないように、再度プログラムのリファクタリングを行うTDDの目指すところは綺麗な実装できちんと動くコードを記述することです。レッド→グリーン→リファクタリングの繰り返しを行うことでコードを洗練していきます。レッドではプロダクトコードに何も書かれていなくても、とにかく先にテストコードを書き、それが失敗する事を確認します。以下のコマンドで簡単にインストールできます。rspecこのように表示されたらインストール完了です。installedRSpecは、rspecコマンドの引数としてふるまいを定義したスペックファイルを指定すれば、そのRSpecの実行が可能です。(RSpecのファイル名).rbRSpecのシンタックスそれでは、実際にRSpecの記述方法についてまとめていこうと思います。(今回RSpecのシンタックスをまとめるにあたって伊藤さんのQiitaの記事を参考にさせて頂きました。参考になりました、ありがとうございます。expectRSpecの最も基本的な構成要素は以下の様に記述できます。endend「describe」でテストを1つのグループとして定義します。その中に、「it」を含むブロックを記述しています。この「it」の役割はexampleと呼ばれる単位で1つのまとまりを作成しています。itブロックの中が全て期待した通りの動きであれば、そのexampleはパス(成功)したことになります。2この部分がエクスペクテーションと呼ばれる文で、ここで期待する結果を検証します。ここで書かれているメソッドの様なふるまいをする「to」や「eq」はマッチャと呼ばれるもので、期待値と実際の値を比較して、一致した又は一致しなかったという結果を返すというオブジェクトのことです。true及びfalseを返すメソッドのようなものだというイメージを持つと良いかもしれません。適当に名前を付けて、このテストコードを実行してみましょう。failuresこのようにテストコードに1つのexampleが含まれており、かつそのテストコードにfail(失敗)が無い事が確認できます。describeの中に複数のexampleを持つことも可能です。endendちなみにこのテストコードの実行結果は上と同様に以下の様に表示されます。failuresさらに、exampleの中に複数のエクスペクテーションを記述する事も可能です。endend実行結果は以下の様になります。failuresこのように、1exampleのみ検出され、各エクスペクテーションについての詳細な結果は出力されません。よってエクスペクテーションを複数記述する場合は注意が必要です。テストがfailした場合、どのエクスペクテーションが原因なのかわからなくなってしまうためです。基本的には1つのexampleにつき1つのエクスペクテーションを記述するのが原則だそうです。describeを入れ子構造にすることも可能です。endend役割によってdescribeを用いてグルーピングする事で可読性を上げることができます。主要なマッチャさて、RSpecでは適切なマッチャを使いこなすことが上達への一歩でもありますが、ここでは使用頻度が高いと思われる主要なマッチャをリスティングしておきます。X(式)するとYがAからBに変化することを期待する。エラーが出る事を期待する「be」は等号、不等号を使わずに検証する事も可能です、しかしその場合は「インスタンス」が等しいかどうかを検証してしまうので、同じ値でもインスタンスが異なる場合にテストが失敗してしまいます。基本的には等しいことを検証する場合には「eq」を使っておけば問題ないと思います。上の主要なマッチャを覚えていれば基本的なテストコードは書けるのでしっかりと覚えていきたい所です。まとめ今回はRSpecの基本中の基本をまとめてみました。意味を把握する事、そしてエクスペクテーションを適切なマッチャを利用してテストコードを記述する事です。RSpecはこれ以上に複雑な構文やマッチャを多数保有しています。学習する事は多そうなので、少しずつ勉強していこうと思います。RSpecをこれから学習するという方も、是非今回の記事で紹介した基本をしっかり頭に叩き込んでから次のフェーズへ移りましょう。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。【CSS】サイトのロゴ画像に対してテキストを隠し要素にする方法と注意Homebrewとは何者なのか?概要と基本的な使い方をまとめてみたRECOMMENDこちらの記事も人気です。(TECH::CAMP)の無料説明会に行ったら衝撃の事実が発覚した件について【2019年最新】テックキャンプ(TECH::CAMP)の評判と料金、概要まとめ。実際の最新情報を解説します。