LoginSignup
0
1

More than 3 years have passed since last update.

[備忘録]Railsにおけるテスト

Posted at

テストとは

記述したコードが意図した通りに動作するかを確認するもの
テストを行わないで世に出るサービスは無い
Rspecを利用する
利用する際にはGemのrspec-railsのGemをインストールすることで使用できる。

メリット

仕様漏れを防げる
リファクタリングや機能追加がしやすくなる

心がけること

必然的に記述コードが増えるので開発時間が長くなるのは仕方ない、しかしそれを超えるメリットやリスクヘッジがある
同じような記述のコードが増えるがリファクタリングしすぎてしまうと何のテストかわからなくなってしまうので、テストコードはわかりやすさ重視で記述する。

種類

単体テストと統合テストがある

RSpecの設定

ターミナル
$ rails g rspec:install

RSpecの設定ファイルを作成
下記のファイルが作成される

ターミナル
create  .rspec
create  spec
create  spec/spec_helper.rb
create  spec/rails_helper.rb

共通の設定はrails_helper.rbに記述し
spec_helper.rbも同じく共通の設定を記述するところですがRails無しで使用する際のもの

RSpecに以下を追加

.rspec
--format documentation

RSpecの動作確認

ターミナル
$ bundle exec rspec

下記のような出力があれば準備完了

ターミナル
No examples found.


Finished in 0.00031 seconds (files took 0.19956 seconds to load)
0 examples, 0 failures

テストコードの例

1+1が2になることをテストする場合

sample_spec.rb
describe "hogehoge" do
  it "1 + 1は2になること" do
    expect(1 + 1).to eq 2
  end
end

describeというキーワードでテストをグループ化
テスト1つ(example)として評価されるit do ~ endのブロックの中に、
expect(X).to eq Yという形式の式を記述。
これがテストが成功するかどうかチェックされる式(エクスペクテーション)。

describe
describeは、直後のdo ~ endまでのテストのまとまりを作る。
describeの後に続く""の中にはそのまとまりの説明を書く。

itとexample
itはexampleと呼ばれる実際に動作するテストコードのまとまりを表す。
itの後に続く""の中にはそのexampleの説明を書く。

エクスペクテーション
実際に評価される式。
it do ~ endの間に書く。
上記の式ではexpect(1 + 1).to eq 2の部分がエクスペクテーション。

xpect(X).to eq Y
エクスペクテーションの文法。
xの部分に入れた式の値がYの部分の値と等しければ、テストが成功。
eqの部分を、マッチャと言う。

マッチャ
エクスペクテーションの中で、テストが成功する条件を示す。
例えばeqは「等しければ」という意味になる。
他にもinclude(含んでいれば)、valid(バリデーションされれば)など複数のマッチャが存在する。

valid?メソッド
valid?メソッドを利用すると、ActiveRecord::Baseを継承しているクラスのインスタンスを保存する際に「バリデーションにより保存ができない状態であるか」を確かめることができる。

errorsメソッド
valid?メソッドの返り値はtrue/false、valid?メソッドを利用したインスタンスに対してerrorsメソッドを利用すると、バリデーションにより保存ができない状態である場合なぜできないのかを確認できる。

includeマッチャ
includeマッチャは、引数にとった値がexpectの引数である配列に含まれているかをチェックすることができるマッチャ。

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