LoginSignup
4
2

More than 5 years have passed since last update.

Rspec を使ったrailsアプリケーションの自動テスト

Last updated at Posted at 2019-04-13

Rspecのgemを使ったRailsの自動テストについて

積極的にアウトプット!

ということで今回はRspecのgemを使った自動テストについて学習をしましたので、
それについてのアウトプットをしていきます。

はじめに

Rspecでは単体で動くプログラムが正常に動くのか、複数のプログラムが連動して正常に動くかということを自動でテストしてくれる機能になります。
Railsではgemを使って、実装し使っていくことになります。

今回はRailsで rspec-rails というgemを使ってテストしていきます。

Setting

まずはgemのインストール、bundle installを済ませましょう。

gem 'rspec-rails'
bundle install

次にRspecに必要な設定ファイルを用意します。
ターミナルで以下のコマンドを入力。

bundle exec rails g rspec:install

そうすると以下のようなフォルダ・ファイルが作成されます。
app/spec
app/spec/rails_helper.rb
app/spec/spec_helper.rb
.rspec

今後はこのspecのディレクトリ内にテストコードやそれを入れておくフォルダを作成していきます。

各ファイルの役割

上記コマンドで生成されたファイルの役割です。

rails_helper.rb 
テストコードを書いたファイルに対して共通して使いたい設定やメソッドをここに記入します。
呼び出すときは、各々のファイルで require 'rails_helper' のように記載する。

spec_helper.rb
共通する設定やメソッドを書いておくというところは同じであるが、こちらはrailsを使用しないという違いがある。
railsの特殊な書き方はせず、Rspecの全体的な設定をかけるようです。

テスト結果の形式設定

次に.rspecファイルにテスト結果で返ってくる答えがどういう形式で返ってくるかを設定します。

記入の仕方は 

--format progress

のように記載します。

この progress というところが指定する形式名になります。
種類として、
・ progress
・ documentation
・ html
・ json
があるようです。

何も設定として記載しなかった場合は、progressがデフォルトとして設定されています。

それぞれどのように返ってくるかは、詳しくまとめられている方がいらっしゃったので、
参考としてリンク貼っておきます。
http://samurai.ataglance.jp/rspec_format/

今回はdocumentationで指定していきます。

Test

では早速テストを行っていきます。
今回はモデルの一つのファイルに対して、単体テストを行いました。
テストを行う際はテストを行うそれぞれのフォルダを作成し、その中にテストコードを書くspecファイルを設置します。
コントローラーであれば、spec/controller

image.png

テストコードを書くspecファイルの命名には慣習があるようです。

対応するクラス名_spec.rb

今回はuserモデルのファイルでテストを起こっていくので画像のように作成しています。

spec/models/user_spec.rb
require 'rails_helper'
describe User do
  describe '#create' do
    it "is invalid without a nickname" do
      user = User.new(nickname: "", email: "", password: "00000000", password_confirmation: "00000000")
      user.valid?
      expect(user.errors[:nickname]).to include("can't be blank")
    end
  end
end

上記のように記載をしました。
これはニックネームカラムにデータが入っていなかったとき、ちゃんとエラーが出るかどうか
バリデーションが機能しているかどうかを確認するテストコードになっています。

require 'rails_helper' rails_helperで設定した共通設定を呼び出します。

describe 詳細名 do
 ・・・
end

テストのまとまりをグループ化します。
基本的に・・・の部分に処理を書いていきます。

上の例で行くと、userモデルの中のcreateというアクションに対するテストということになります。

it "testの説明" do
・・・
end

it doは一つのテストのかたまり(example)を表します。
一つのテストの処理をこの中に書いていきます。

expect(X).to eq(Y)

基本的なテストコードの書き方です。
エクスペクテーションという。
意味は、XとYが等しければテスト成功 という意味です。

一度試しに X 1+1 Y 1+1 の値はお互いに等しいかということをテスト実行してみると

image.png

のように返ってくる。
これはexample が1つ 、失敗は0 という内容です。

また、eqの部分はマッチャといい他にも種類がある。
include()   ()内の値を含む場合、テスト成功。など

□他使用メソッド
valid?  バリデーションによりデータが保存できない状態かを確認する true false で返す
errors 上記のようなメソッドを利用したインスタンスに対して原因がわかるようにする。

image.png

最後に テストを実行するときは

ターミナルで bundle exec rspec

以上

4
2
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
4
2