統合テストをやってみた @TECH CAMP #10
どうも、ちまちま頑張ってます、とだです。
テストコードの勉強をしていて、単体テストと統合テストについて学びました。順番的には単体テストからアウトプットしようと思っていましたが、統合テストの方が先にまとまってしまったので、とりあえず先に備忘録としてお披露目しようと思います。
今回はコードの中にコメントアウトを入れて個人的にわかりやすくまとめました。こういうやり方が良いのかどうかはわかりませんが、自分としてはコードの中のどれがどの役割を果たしているかが直感的にわかりやすいので、自分で理解できるまではこのやり方も使っていこうと思っています。
以下がInstagramやtwitterのような画像が投稿できるwebアプリケーションをテストするテストコードです。
具体的には
1. ログインしないと投稿できないこと
2. ログインの処理ができること
3. ログインした後なら、ツイートを投稿できること
をテストしています。
require 'rails_helper'
# ここでは、ユーザーが実際にアプリーションを操作する様子を再現して行われる
#「統合テスト」を行なっています
feature 'tweet', type: :feature do
let(:user) { create(:user) }
scenario 'ユーザー情報が更新されていること' 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
# fill_inメソッドを使って値が入力される動きを作成
# idがuser_emailのフォームにはlet(:user)で作成したuserのemail
# idがuser_passwordのフォームにはuserのpasswordを入力
# ログイン処理後はルートにリダイレクトされるようになってるかテスト
expect(current_path).to eq root_path
# ログイン状態では投稿ボタンが表示されることをテスト
expect(page).to have_content('投稿する')
# ツイートの投稿テスト
# ツイートを投稿すると、保存に成功したことによって
# Tweetモデルのレコードが1個増えたかどうかテスト
expect {
# 投稿ボタンを押すと新規tweet投稿ページに遷移するかテスト
click_link('投稿する')
expect(current_path).to eq new_tweet_path
# fill_inメソッドを使ってimageとtextが入力される動きを生成
fill_in 'image', with: 'ここには画像のURLを入れます'
fill_in 'text', with: 'フィーチャースペックのテスト'
# 投稿ボタンを押す
find('input[type="submit"]').click
}.to change(Tweet, :count).by(1)
end
end
様々なメソッドや、テストしたい内容はどのように確認するのかなど、自分の予想とは違うところがあったのでしっかり身につけたいと思います。
とりあえず今回はここまで。
この記事が気に入ったらサポートをしてみませんか?