一段上のエンジニアに。Rails でテストコードを書く ( RSpec )

2017年12月22日

 

 

昨今TDDなどもあり、
テストコードについての話題がありますが、

 

個人的にテストコードが書ける人
= 初級者を脱した中級者 のようなイメージを持っています。

 

打たれる前に打てというような
考えもあるかと思いますが、
打たれても大丈夫なように体を作ることも大事です。

ちょっと何を言いたいのかわかりませんが
野球もサッカーも守りが強いという土台の上でこそ
攻撃力や創造性が発揮されるということです。

ということで脱線しましたが、
簡単な導入から行きましょう。

 

まずはアプリはこんな感じです。

足し算アプリ

はい、簡単な足し算をするアプリです。
viewのコードは以下です。
view code

 

 

bootstarap
で多少装飾していますが、
今回はここで呼んでいる addというメソッドのテストを書いてみます。

まずはインストールから
方法はここにあります。
https://github.com/rspec/rspec-rails

ということで
gem ‘rspec-rails’, ‘~> 3.5’を追記してから
bundle installします。

インストールできたら初期化

rails generate rspec:install

テストの実行方法は以下です。

# モジュール単位
bundle exec rspec spec/[ models / helpers / controller / .. ]

# ファイル単位
bundle exec rspec spec/helpers/homes_helper_rspec.rb
テストコードは以下の通り
require 'rails_helper'
include(HomesHelper)

RSpec.describe HomesHelper, type: :helper do
  # pending "add some examples to (or delete) #{__FILE__}"

  describe "GET /homes" do
    it "about add method" do
      # normal case
      sum = HomesHelper.add( 1, 2)
      expect(sum).to eq(3)

      # either nil
      sum = HomesHelper.add( nil, 2)
      expect(sum).to eq(0)

      # either nil
      sum = HomesHelper.add( 1, nil)
      expect(sum).to eq(0)

      # both nil
      sum = HomesHelper.add( nil, nil)
      expect(sum).to eq(0)
    end
  end
end

 

 

it から end までがテストの一単位ですね。
実行してみます。

$ rspec spec/helpers
Please report a bug if this causes problems.
.

Finished in 0.02032 seconds (files took 4.38 seconds to load)
1 example, 0 failures

はい成功です。
今回は一発目で成功しましたが、
失敗すると

$ rspec spec/helpers
WARN: Unresolved specs during Gem::Specification.reset:
      diff-lcs (< 2.0, >= 1.2.0)
WARN: Clearing out unresolved specs.
Please report a bug if this causes problems.
.

Finished in 0.02032 seconds (files took 4.38 seconds to load)
1 example, 0 failures

こういう感じになります。
今回はシンプルなパターンだったので、
もう少し複雑なパターンを試してみたいです。

試したらまたこのブログで紹介します。

rspecは他にもcontrollerやmodel,routingもテストできます。
はい!今回はここまで。