Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 21081

Hello RSpec

$
0
0

新人のRailsエンジニアです。
RailsのTestをするにあたってRSpecを学んだのでまとめてみました。
100日後に1人前になるエンジニアを連載中です。本日は7日目
ちなみにMinitestとRSpecの比較についてはこちら

RSpecとは

RubyやRuby on Railsで作ったクラスやメソッドをテストするためのドメイン特化言語 (DSL)を使ったフレームワーク。
つまりは、テスト専用のプログラム言語とも言えます。

FactoryBot

テスト用のデータの作成をサポートするgem
FactoryBotを利用するとテスト用のデータを簡単に準備できる
Rails標準ではFixtureという仕組みもありますが、
こちらよりもデータの状態やデータ間の関係性を掴みやすい。
ということで今回はこちらも使用。

Capybara

WebアプリケーションのE2E(End-to-End)テスト用フレームワーク。
RSpecなどと組み合わせて使います。Webアプリケーションのブラウザ操作をシュミレーションできる。

RSpecの基本形

RSpecの記述の基本形としては以下の様な形です。

describe[仕様を記述する対象(テスト対象)],type[specの種類]docontext[ある状況]dobeforedo[事前準備]endit[仕様の内容(期待の概要)]do[期待する動作]endendend

これだけみてもなかなかわからないので分割してみていきます。

describe

describe[仕様を記述する対象(テスト対象)],type[specの種類]doend

describeには、何について仕様を記述しようとしているのかを書きます。
例えばsystemテストをプロフィール表示機能について仕様を書きたいのであれば

describe 'プロフィール表示機能', type: :system do

と言った具合ですね。

context

こちらはテストの内容を状況、状態のバリエーションごとに分類するために利用します。
例えばユーザーの入力内容が正しいか間違っているか、ユーザーがログインしているか否かなどを
contextに記述していきます。

before

beforeはその領域全体の前提条件を実現するためのコードを記述している
以下のだとプロフィールを表示するための前提条件。
この場合だとログインしていることが前提条件になっている

context'ユーザーがログインしているとき'dobeforedovisitlogin_pathfill_in'メールアドレス',with: 'email@example.com'fill_in'パスワード',with: 'password'click_button'ログイン'endend

it

最後のitは期待する動作と文章をブロック内のコードで記述します
expect(page).to have_content 'hoge'
上の記述は画面に"hoge"という内容があるよね??
っていう内容になっています。
expect to have contentなので英語のままといえばそれまでですが。

#プロフィール画面に'ユーザーのプロフィール'って内容があるよね??it'ユーザーのプロフィールが表示される'doexpect(page).tohave_content'ユーザーのプロフィール'end

以上まとめてみると

describe'プロフィール表示機能',type: :systemdocontext'ユーザーがログインしているとき'dobeforedovisitlogin_pathfill_in'メールアドレス',with: 'email@example.com'fill_in'パスワード',with: 'password'click_button'ログイン'endit'ユーザーのプロフィールが表示される'doexpect(page).tohave_content'ユーザーのプロフィール'endendend

こう言った形でRSpecの基本形が成り立っています。
いきなり全部理解しようとするとつらいけど、分割してみるとなんとかなりそう。

今回は基本形をどう見るかという点でまとめてみました。
実際はもっとネストがあって、込み入っている様に見えますが、
まずは基本形をおさえてRSpecの理解を深めていきたいですね。

本日は以上です
1人前のエンジニアになるまであと93日


Viewing all articles
Browse latest Browse all 21081

Trending Articles