WIP

テストの基本

created at 2016.10.21
updated at 11ヶ月前 ago
vsanna / public Rspec

testの種類

  • 単体テスト(Unit test)
    • 関数 / メソッド単位でテストを行なうこと。入出力のテストなど、シンプルな確認に終始
    • すぐに書けるコスパの良さから大抵の場合はこれをさすとのこと
      • とはいえ、全ての関数をテストできるわけはないので重要なところだけカバーするのは他のテスト手法と同じ
    • 通常のサービスであればあまり重要視されないが、アルゴリズムの確認には有効
  • 結合テスト(Integration test)
    • (ユニットテストを経た)パーツを複数組み合わせて行うテスト
      • 様々なパターンにおいて動作やふるまいが正常であるかを確かめる
      • jsまでふくめてテストしたい → E2Eテスト
    • 内容としては シナリオの作成 → シナリオから機能/振る舞いごとにテストコードのメソッドに切り出してさらに小さい単位の振る舞いにして...というテストコードを書いていく
    • 問題点
      • インテグレーションテストは実装 / 実行ともに時間コストが大きい
  • E2Eテスト ... 結合テストの一種
    • クライアントまで含め、Webサイトやアプリケーションの「開始から終了まで」が、期待通り動いているかをテストする
      • 人がポチポチ手で確かめていたものを自動化した。
      • フィーチャスペック(feature spec)とも言う
        • 「フィーチャスペックはブラウザ上の操作をシミュレートして、実行結果を検証するテストです」
    • jsを動かすやり方として2つのドライバが主流
      1. seleniumを用いて、実際にブラウザを立ち上げて行なうテスト
        • ブラウザ起動なので遅いが、動く様子を見ることができる
      2. phamtomjsをもちいて、ヘッドレス(ブラウザの起動無しに JavaScript が実行できる)ドライバにもとづいて実行する
        • capybaraからphantomjsを利用できるようにするライブラリがpoltergeist
# 結合テストの例
# シナリオ
feature 'User buys a product' do
  scenario 'Can complete all the process', js: true do
    user_tries_to_buy_a_product
    user_can_choose_amount_of_units
    user_can_select_the_address
    user_can_confirm_the_order
    thank_you_page_is_showen
    user_pressing_back_button_is_redirected_to_cart_page
  end
end

# シナリオのひとつの振る舞いを切り出して、その中でロジックを記述
spec/features/user_buys_a_product_spec.rb
feature 'User buys a product' do
  ...  

  def user_tries_to_buy_a_product
    create_normal_product
    load_page_with_valid_user product_path(@product)
    stub_user_has_one_credit_card
    find('.c-btn--submit').click
  end
end



feature 'Feature name' do
  scenario 'Scenario' do
    user_behavior1
    user_behavior2    
    ...
  end

  def user_behavior1
    set_data
    user_behavior1_1
  end

  def set_data
    create_some_data
  end 

  ...
end

参考情報

shareシェアする

forumコメント

まだコメントはありません!
ログインしてコメントを残す
{{comment.user.name}} on {{commentCreatedAt()}}

content_copy前後のイシュー

{{message}}