自分用の操作メモとして、テストフレームワークの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