Help us understand the problem. What is going on with this article?

Rspecでのテスト入門~E2E(System)テスト基本文法編~

対象読者

  • テストコードを書いたことがない。(わたし)
  • ブラウザをポチポチするクソつまら..テストしかしたことがない人。(わたし)
  • ※ あとがき...テストの種類と基本文法を書いていたらボリューミーになってきたので実際に書いたコードは別の記事で載せます。

まずテストの種類

現時点では「こういうのがあるんだー」程度の理解です。

image.png

E2E(システム)テストとは

End to Endの略。コードからブラウザを操作して意図したとおりに表示、操作、画面遷移など出来るかをテストする

テストコードを書くのは億劫である?

今回テストコードを書いてみて、自分の意図した通りに動いたらなかなか気持ちよかった。。。それに、テストコードを書き自動テストを実行すると良いことがある。

良いこと

  • バージョンアップ時に既存機能が正しく動作しているかを素早く確認できる。(レガシーな現場では全機能をポチポチさせられてるSESの人もいるんです...良いか悪いかは置いといて...)
  • 仕様を記述したドキュメントとしても機能する(設計書が整備されていない現場は多いです。)
  • リグレッションテストが速攻で終わるので結局は開発効率を上げてくれる

参考書籍

使用するテスト用ライブラリ

  • RSpec...BDD(Behaviour-Driven Development):振舞い開発駆動用テスティングフレームワーク
  • Capybara...E2E(End-to-End)テスト用フレームワーク
  • FactoryBot(テストデータ作成gem)
  • selenium-webdriver(ブラウザを操作してくれるgem)
  • chromedriver-helper(chromeを動かすのに必要)
  • testのところに書くんですねー
group :development, :test do
  gem 'factory_bot_rails','~> 4.11'
#省略

group :test do
  gem 'capybara', '>= 2.15'
#省略
  gem 'selenium-webdriver'
  gem 'chromedriver-helper'
  gem 'rspec-rails', '~> 3.7'

RSpecの基本形(用語と構造)

  • テストケースを整理・分類する
    • describe...テストの対象機能の説明文
    • context...条件の説明文
  • テストコードを実行する
    • it...アウトプットを記述
    • expect...(エクスペクテーション)期待される処理を記述する
describe '仕様を記述する対象' , type: [Specの種類] do

  context [状況・状態の条件] do
    before do
      [事前条件]
    end

  it '仕様の内容(期待の概要' do
    [期待する動作の処理]
  end

end

describe '計算' do
  it '1 + 1 は 2 になること' do
    expect(1 + 1).to eq 2
  end
end

具体例

このようにdescribeitが仕様として残る。
it(example)をネストして書くこともできる

describe '計算' do
  it '1 + 1 は 2 になること' do
    expect(1 + 1).to eq 2
  end
  it '2 - 1 は 1 になること' do
    expect(2 - 1).to eq 1
  end
end

・1つのit(example)の中にexpectを設置することもできる。ただし、expectがエラーになった時にテスト失敗で落ちてしまうので基本は1つのexapleに1つのexpectとする。

describe '計算' do
  it '四則演算をする' do
    expect(1 + 1).to eq 2
    expect(2 - 1).to eq 1
    expect(5 * 5).to eq 25
    expect(40 / 5).to eq 8
  end
end

その他の文法

  • before
    • 前提条件を処理する際にdescribe内に記述。itが実行されるたびに新たに実行される。
    • 次のitが実行されるまでにデータベースの状態は元に戻されるため、あるテストケースで行った処理のせいで別のテストケースが影響を受けることはない。

今回は一旦ここまで、随時更新予定。次は

FactoryBotでテストデータを作成できるように準備するを書けたらいいな。

sukezane
2019年より開始。 都内SES3年目。Nuxt TypeScript golang はてブ(実績管理用):https://yosuke0517.hatenablog.com/archive twitter:https://twitter.com/yosuke40102069 2020は「Go」触りたい。 目標:月2件の投稿(Qiitaに限らず)
https://yosuke0517.hatenablog.com/archive
rosso-tokyo
渋谷にある少数精鋭のベンチャーSierです。最新技術・手法は常にキャッチアップし社内勉強会で情報共有しています。最近では外部技術セミナーも開催し情報発信の幅を広げています。
http://www.rosso-tokyo.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした