LoginSignup
0
0

More than 1 year has passed since last update.

RSpec導入と基本操作

Last updated at Posted at 2023-03-19

自分用の操作メモとして、テストフレームワークのRSpecを導入し使用してみます。

私の環境

Tool Version
MacOS(Ventura) 13.0
Docker
Ruby 2.6.4p104
Rails 6.0.6.1
RSpec 3.12

RSpecの初期設定

RSpecのインストール

プロジェクトフォルダ内で以下のコマンドを実行します。

RSpecのインストール
$ bin/rails g rspec:install
実行結果 - 次のような結果が出力されればOK
Running via Spring preloader in process 1087
    create .rspec
    create spec
    create spec/spec_helper.rb
    create spec/rails_helper.rb

RSpecファイル・ディレクトリを作る

最初に簡単なテストコードを作って動作テストをしてみる。

RSpecのディレクトリ構成

spec/models モデルクラスに関するspecファイル
spec/requests APIに関するspecファイル
spec/hogefuga 独自のサブディレクトリを用意しても構わない

RSpecの基本的ルール・慣習

  • RSpecのテストコードは、通常specディレクトリ配下に置きます
  • ファイル名の末尾は、_spec.rb で終わるようにします
  • specファイルはspecディレクトリのサブディレクトリに適宜分類して配置します
  • どのサブディレクトリにどんなspecファイルを置くかは慣習的に決まっています
  • 独自のサブディレクトリを用意しても構いません

specファイルを作成する

今回は、新しくexperimentsフォルダを作成し、string_spec.rbファイルを作成して実験します。

spec/experiments/string_spec.rb(新規作成)
require "spec_helper"

describe String do
  describe "#<<" do
    example "文字の追加" do
      s = "ABC"
      s << "D"
      expect(s.size).to eq(4)
    end
  end
end

RSpecでテストを実行する

個別実行(RSpecはspecファイルのパスを指定して個別に実行できる)
$ rspec spec/experiments/string_spec.rb
一括実行(specファイルを含むディレクトリを指定して、そこに含まれるspecファイルを一括実行することもできる)
$ rspec spec   # ディレクトリ指定で実行(specディレクトリ以下にある全てのspecファイルを実行する例)
$ rspec        # パスなしで実行(rspecコマンドはデフォルトでspecディレクトリに設定されているため、上と同じ結果になる)
tagを使ったテストコマンド - exceptionタグを記載したexampleのみ実行する例
$ rspec spec --tag=exception
テストコマンドの実行 - ファイル名末尾に「:行数」を指定して特定行のみを実行する
$ rspec spec/experiments/string_spec.rb:11

RSpecの記述例

/spec/experiments.string_spec.rb(新規作成)
require "spec_helper"

describe String do
  describe "#<<" do
    example "文字の追加" do
      s = "ABC"
      s << "D"
      expect(s.size).to eq(4)   # expectメソッドとマッチャー。expect(Target).to eq(Match)形式で評価
    end

    # xexample "nilの追加" do   # xexampleにする事でpending(保留)メソッドにできる
    example "nilの追加", :exception do #タグを追加
      s = "ABC"
      s << nil
      expect { s << nil }.to raise_error(TypeError)
    end
  end
end

RSpec公式リファレンス(Built-in matchers)
https://rubydoc.info/gems/rspec-expectations/file/README.md#built-in-matchers

0
0
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
0
0