ぞす!げんきちです!\\\\٩( 'ω' )و ////
「いや、誰だよ」って方は、下記リンクを見てやってください。
-
はじめまして!げんきちです! - げんきちの秘密基地
-
僕がエンジニアになりたい理由 - げんきちの秘密基地
目次〜
テストについて学習していたので、要点をまとめてみます!
特定の機能・バリデーションなど、単独で予測した仕様になっているかのテスト。
messagesコントローラでメッセージ一覧を表示するアクションのテスト
require 'rails_helper'
describe MessagesController do
let(:group) { create(:group) }
let(:user) { create(:user) }
describe '#index' do
context 'log in' do
before do
login user
get :index, params: { group_id: group.id }
end
it 'assigns @message' do
expect(assigns(:message)).to be_a_new(Message)
end
it 'assigns @group' do
expect(assigns(:group)).to eq group
end
it 'redners index' do
expect(response).to render_template :index
end
end
context 'not log in' do
before do
get :index, params: { group_id: group.id }
end
it 'redirects to new_user_session_path' do
expect(response).to redirect_to(new_user_session_path)
end
end
end
end
①各exampleで期待する値は1つ
#2つ以上含めてしまうと、どちらのエクスペーションでエラーが出たのか判別できないため。
②期待する結果をはっきりわかりやすく記述
# it "〜" doの"〜"の部分。コミュニケーションミスを減らすため。
③起きて欲しいことと起きて欲しくないことを両方テストする
#予期せね動作が残るのを防ぐため。
④境界値をテストする
#6文字以上でバリデーションに引っかかる条件の場合
「5文字以上まで正常」と「6文字以上なら異常」を確認。
予期せぬ動作を防ぐため。
⑤可読性を考えつつ、適度にDRYにする
#分かりづらくなってテストの見落としが起きるのを防ぐため。
統合テストとは
ユーザーが実際にアプリケーションを操作する様子を再現して行われるテスト。
統合テストの例
ブラウザ上でユーザーがログインして投稿するまでのテスト
require 'rails_helper'
feature 'tweet', type: :feature do
let(:user) { create(:user) }
scenario 'post tweet' do
visit root_path
expect(page).to have_no_content('投稿する')
visit new_user_session_path
fill_in 'user_email', with: user.email
fill_in 'user_password', with: user.password
find('input[name="commit"]').click
expect(current_path).to eq root_path
expect(page).to have_content('投稿する')
expect {
click_link('投稿する')
expect(current_path).to eq new_tweet_path
fill_in 'image', with: 'https://s.eximg.jp/expub/feed/Papimami/2016/Papimami_83279/Papimami_83279_1.png'
fill_in 'text', with: 'フィーチャスペックのテスト'
find('input[type="submit"]').click
}.to change(Tweet, :count).by(1)
end
end
統合テストコードを書く際の注意点
①一部の記述の名前が単体テストと異なる
# it => scenario
before => background
dexcribe => feature
let => given、などなど。
エイリアスメソッドなので、内部的な実装は全く同じ。
②複数のexpectが同一テスト内に記述される
#ユーザーの1つの動作の結果として、複数のexpectを期待する場合があるため。
テストあるある
Finished in 9.96 seconds (files took 5.16 seconds to load)
15 examples, 0 failures
気持ちいい...
<一日一新>
Bunkamuraデビュー。展示会を定期的に開催しているみたいです。
<学習進捗>
学習開始からの期間 :83日
今日までの合計時間:822h
今日までに到達すべき目標時間:757h
目標との解離:65h
「10,000時間」まで、
残り・・・「9,178時間!」
以上です。
読んでくれた方々、ありがとうございました!((_ _ (´ω` )ペコ。
genkichi.hateblo.jp
genkichi.hateblo.jp
twitter.com