2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】Rspecを利用したテストコードとマッチャについて

Posted at

RSpecを利用したテストコードの記述を学習する中で得た知見の記録を目的とした記事です。

#まずRspecとは
Rubyコードをテストする為にRubyで記述された「ドメイン固有言語」テストツールです。
Railsでは「rspec-rails」というGemを導入する事で、使用出来るようになります。
※この記事ではRspecの導入方法については触れません。

導入の目的は、テストコードが設計である事をプログラマーが意識する事と、テストコードの記述をスムーズに行う為です。

#Rspecのディレクトリ構造
RSpecで書かれたテストコードのファイルをspecファイルと呼びます。
アプリケーションのappディレクトリ以下にあるテスト対象となるモデルやコントローラーの位置に
対応させる形で、specフォルダ以下にディレクトリを配置します。

例:
spec/models/ spec/controllers/

また、specファイルの命名規則として、対応するクラス名_spec.rbと設定する必要があります。

テストコードについて

前置きが長くなりましたが、テストコードについて説明します。

sample_spec.rb
describe "CalculationFunction" do
  it "5 + 5は10になる事" do
    expect(5 + 5).to eq 10
  end
end

##describe
describeは直後のdo〜endまでをグループ化して、テストのまとまりを作ります。describeのあとの""にはテストの対象とするものを書きます。

##itとexample
itexampleと呼ばれる実際に動作するテストコードのまとまりを表します。itに続く""にはそのexampleの説明を書きます。

##エクスペクテーション
テストで評価される式の事です。it do〜endの間に書きます。例ではexpect(5 + 5).to eq 10の部分がエクスペクテーションです。また、eqの部分をマッチャと言います。

##マッチャ
エクスペクテーションの中で、テストが成功する条件を示します。例では、eqマッチャを使用しており、「等しければ」という意味を持っています。

##to / not_to

expect(5 + 5).to eq 10

toは「〜である事」を期待する際に使用します。

expect(5 + 7).not_to eq 10

逆に「~ではない事」を期待する際は not_toを使用します。

##includeマッチャ

x = [1, 2, 3]
expect(x).to include 1, 3

includeマッチャの引数にとった値が、expectの引数である配列に含まれているかをチェックする事が出来ます。

##be_validマッチャ

it "is valid with a nickname, email, password, password_confirmation" do
      user = build(:user)
      expect(user).to be_valid
    end

expectの引数にしたインスタンスが、全てのバリデーションをクリアする場合にパスするマッチャです。

##matchマッチャ
引数に配列クラスのインスタンスをとり、expectの引数と比較するマッチャです。配列の中身の順番までチェックします。

##render_templateマッチャ
引数にシンボル型でアクション名を取り、引数で指定したアクションがリクエストされた時に自動的に遷移するビューを返します。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?