CheatSheet
日本語 icon日本語English iconEnglish
チートシートとはカンニングペーパーのことです。それが転じて、本来覚えることをまとめておいたものです。
要点をすぐに参照できるようにまとめてみました。

RSpec

エンジニアのためのWebチートシート

RSpecとはRubyで実装されたBDD(behavior driven development)のためのテスティングフレームワークです。自然言語のような読み書きのしやすさが特徴です。 RSpecの基本的な書き方、テストコードのDRY化のための仕組み、マッチャなどをチートシートにまとめてみました。

導入

Railsの場合

  • 1. gemのインストール

    group :development, :test do
      gem 'rspec-rails'
    end
  • 2. bundle install

    bundle install
    
  • 3. RSpecに最小限必要なファイルをRailsにインストール

    rails generate rspec:install
    

Railsを使用しない場合

  • 1. 作業ディレクトリの作成

    mkdir rspec_workdir && cd rspec_workdir
    
  • 2. bundlerを初期化

    bundle init
    
  • 3. gemのインストール

    source "https://rubygems.org"
    
    gem "rspec", ">= 3.0.0"
  • 4. RSpecの初期化

    bundle exec rspec --init
    

RSpecの基本

基本形

describe 'calculate' do
  it 'is correct' do
    expect(1 + 1).to eq 2
  end
end

describeはテスト対象をグループ化します。 itはテストをexampleという単位にひとまとめにし、itの内部で実行されたテストコードが全てパスした場合に成功とみなされます。 itの中身はテストの本体です。テスト対象の処理と結果を様々なマッチャを使用して比較します。ここでは、'1 + 1' という処理を 'to eq' というマッチャを使用して '2' と等しいかテストしています。

describe/it/expect

describe

describe 'calculate' do
end

describeはテスト対象をグループ化します。 下記のようにテスト対象の構造をdescribeをネストすることで表現することができます。

describe 'calculate' do
  describe 'sum' do
    it 'is correct' do
      expect(1 + 1).to eq 2
    end
  end
  describe 'minus' do
    it 'is correct' do
      expect(3 - 1).to eq 2
    end
  end
end

it

describe 'calculate' do
  it 'is correct' do
    expect(1 + 1).to eq 2
  end
end

itはテストをexampleという単位にひとまとめにし、itの内部で実行されたテストコードが全てパスした場合に成功とみなされます。 実際にテストを実行した時には下記のように表示されるはずです。

10 examples, 2 failures, 1 pendings

expect

describe 'calculate' do
  it 'is correct' do
    expect(1 + 1).to eq 2
  end
end

'expect' はエクスペクテーションです。 '1 + 1' が '2' と 'to eq'(等しくなること)を期待するという意味です。

context/before/let

context

describe Product do
  describe '#low_price?' do
    context 'when low price' do
      product = Product.new(title: 'Cheatsheet', price: 10)
      it 'return true' do
        expect(product.low_price?).to eq true
      end
    end
    context 'when high price' do
      product = Product.new(title: 'Cheatsheet', price: 10000)
      it 'return false' do
        expect(product.low_price?).to eq false
      end
    end
  end
end

'context' はテストの条件を分岐する時に使用します。 上のテストでは、Productクラスの 'low_price?' というメソッドを'low_price'の時、'high_price'の時という二つの条件でテストしています。

before

describe Product do
  describe '#low_price?' do
    before do
      @product = Product.new(title: 'Cheatsheet')
    end

    context 'when low price' do
      before do
        @product.price = 10
      end
      it 'return true' do
        expect(@product.low_price?).to eq true
      end
    end
    context 'when high price' do
      before do
        @product.price = 10000
      end
      it 'return false' do
        expect(@product.low_price?).to eq false
      end
    end
  end
end

'before' で 'describe' や 'context' 内の共通処理をまとめてコードをDRYに保つことができます。

let

describe Product do
  describe '#low_price?' do
    let(:product) { Product.new(title: 'Cheatsheet') }

    context 'when low price' do
      before do
        product.price = 10
      end
      it 'return true' do
        expect(product.low_price?).to eq true
      end
    end
    context 'when high price' do
      before do
        product.price = 10000
      end
      it 'return false' do
        expect(product.low_price?).to eq false
      end
    end
  end
end

'let' を用いることで遅延評価(変数が必要になるまで呼び出されない)することができます。

Related Goods

  • あまり読みやすい本ではなく、内容も少し古い部分があります!
が、TDDの始まりや思想など深い部分についても学べる一冊です。
    あまり読みやすい本ではなく、内容も少し古い部分があります! が、TDDの始まりや思想など深い部分についても学べる一冊です。
    詳細をみる

WebTerm - Recommended tools

WebTermは、ブラウザでLinuxコマンド・Gitコマンドを安全に実行でき、チュートリアル式で学べるターミナルサンドボックスです。
AIコーディングツールの普及に伴い、CLIの基礎知識を身につける重要性は増しています。実際のターミナルを操作するのに抵抗がある方でも、WebTermはローカル環境を壊す心配がありません。「会員登録不要・無料」で利用でき、学習環境として最適です。

WebTerm Logo

WebTerm

Browser Terminal Sandbox for Learning CLI

開く

All Cheatsheets

エンジニア・プログラマー向けの便利なチートシートを多数まとめています(SP/Tablet/PC対応)
すべてのチートシートを見る