rspecでテストを書き直す

記述してきたテストを見ながらrspecに置き換えていきましょう。

rspecを使ったTicTacToeValidatorTestを実装する

以前に実装したtic_tac_toe_validator_test.rbの内容を参考にrspec版を新しく作成していきます。

specフォルダにtic_tac_toe_validator_spec.rbを作成してください。

(rspecの場合、xxx_testでなくxxx_specと書きます)

rspecを使ったテストの実装

早速、rspecを使ってTicTacToeValidatorTestを記述してみます。

require 'rspec'
require_relative "../tic_tac_toe/tic_tac_toe_validator"
require_relative "../tic_tac_toe/errors/tic_tac_toe_input_error"

RSpec.describe "3目並べのバリデーションに関してテスト" do

  context "ユーザからの入力値に誤りがある場合" do 

    it "意図したエラークラスの返却" do
      expect { TicTacToeValidator.validate_input_value!("a", "0") }.to raise_error(TicTacToeInputError, "行番号の入力に誤りがあります")
      expect { TicTacToeValidator.validate_input_value!("4", "0") }.to raise_error(TicTacToeInputError, "行番号の入力に誤りがあります")
      expect { TicTacToeValidator.validate_input_value!("0", "a") }.to raise_error(TicTacToeInputError, "列番号の入力に誤りがあります")
      expect { TicTacToeValidator.validate_input_value!("0", "4") }.to raise_error(TicTacToeInputError, "列番号の入力に誤りがあります")
    end

  end

  context "ユーザからの入力値に誤りがない場合" do 

    it "エラーが返却されないことを担保" do
      expect { TicTacToeValidator.validate_input_value!("0", "0") }.not_to raise_error
      expect { TicTacToeValidator.validate_input_value!("2", "2") }.not_to raise_error
    end

  end

end

テストのタイトルや動きが日本語で記述され分かりやすくなりました。

テストコードもスッキリしています。

rspecの実行

コンテナの中に入って以下のコマンドを叩きます。

rspec spec

実行すると以下のような画面になると思います。

3目並べのバリデーションに関してテスト
  ユーザからの入力値に誤りがある場合
    意図したエラークラスの返却
  ユーザからの入力値に誤りがない場合
    エラーが返却されないことを担保

Top 2 slowest examples (0.00122 seconds, 14.3% of total time):
  3目並べのバリデーションに関してテスト ユーザからの入力値に誤りがある場合 意図したエラークラスの返却
    0.00117 seconds ./spec/tic_tac_toe_validator_spec.rb:9
  3目並べのバリデーションに関してテスト ユーザからの入力値に誤りがない場合 エラーが返却されないことを担保
    0.00005 seconds ./spec/tic_tac_toe_validator_spec.rb:20

Finished in 0.00856 seconds (files took 0.07446 seconds to load)
2 examples, 0 failures

rspecが気に入ったらminitestで記述していた他のテストコードも置き換えていきましょう。

以下のリポジトリに掲載されているテストコードを参考にして作ってみてください。

最終更新