日曜ITエンジニア劇場

日曜に勉強した情報の整理と、挑戦する新たな技術(私にとって)のつまづきポイントを綴っていきます。

RSpec/構造


参考資料

1.公式 (rspec-core)

RSpec Core 3.9 - RSpec Core - RSpec - Relish

【引用】上記URLより
rspec-core provides the structure for RSpec code examples
(Google訳)
rspec-coreは、RSpecコード例の構造を提供します。

2.【DSL】改めてDSLを調べてみた

第1回 DSLとは?:今そこにある“DSL”|gihyo.jp … 技術評論社
(↑ 参考になりました🙇🏻‍♀️)

3.【構造】Descrie, context, itについて

rspecのdescribe, context, subject, letなどの書き分け - kei-p3’s blog
(↑ 一番しっくりくる説明でした🙇🏻‍♀️)

4.例の資料(電話番号の最大桁数)

質問!ITmedia - 国内で使われる電話番号の最大桁数は?


describe, context, itの位置付け

下記、参考資料3.を参考に記述。

区分名 位置付け
describe テストグループ class, 属性, method など
context テストケース 「nameがnilの場合」など
it 想定結果 「nameは有効であること」など

コーディングイメージ

※下記は構造のイメージををざっくり掴むための記述であり、飽くまでイメージです。
テストケースは少々、強引な記述をしています。

# 【modelのテストの場合】

# model名
# (↓下記はspecファイルの自動生成時に自動で記述されている)
RSpec.describe User, type: :model do

  # 属性1
  describe 'name' do

    # 検証の種類
    describe '必須チェック' do

      # 検証に対するテストケース(正常系)
      context 'nameにnilまたは空白以外の値がセットされている場合' do

        # 想定結果(正常系)
        it 'nameは有効であること' do
          ...[test_coding]...
        end
      end

      # 検証に対するテストケース(異常系)
      context 'nameにnilがセットされている場合' do

        # 想定結果(異常系)
        it 'nameは無効であること' do
          ...[test_coding]...
        end
      end
    dne
  end

  # 属性2
  describe cell_phone_number do

    # 検証の種類
    describe '桁数チェック' do

      # 検証に対するテストケース(正常系)
      context 'cell_phone_numberに11桁の数値がセットされている場合' do

        # 想定結果(正常系)
        it 'nameは有効であること' do
          ...[test_coding]...
        end
      end


      # 検証に対するテストケース(異常系)
      context 'cell_phone_numberに12桁の数値がセットされている場合' do

        # 想定結果(異常系)
        it 'cell_phone_numberは無効であること' do
          ...[test_coding]...
        end
      end
    end
  end
end

※contextに具体値を記述しない理由
テストデータについて、以前、神と崇めていた人のRSpecのレクチャーで下記の様に言われました。
「意図する区分やコードであれば固定値の使用は構わないが、
それ以外の値は固定値を使用すべきではない。ランダムな値を使用すべき」
この具体例は、後日記載する「テストデータまとめ(Titleは仮)」内のGem「Faker」で記載します。