こんばんは!
引き続きテストコードについて記載していきます
今日は結合テストコードです。まずはUserに関するテストコードを書いていくのですが…
現状
私のアプリケーションにはBASIC認証をかけていますので、何も対策しないとタイムアタックが開催されます
手入力で間に合わせるのは至難の業です
というか、テストコードの意味がありません笑
そこで、テストコード内に ”BASIC認証を通す記述” を加えてあげれば良いのです
では記述していきましょう…
改善前の記述
require 'rails_helper'
RSpec.describe "Users", type: :system do
before do
@user = FactoryBot.build(:user)
end
context 'ユーザー新規登録ができるとき' do
it '正しく情報を入力すれば新規登録ができる' do
# トップページに移動する
visit root_path
# 以下省略
end
end
end
ここに設定したBASIC認証のIDとパスワードを読み込ませます。
私は上記2つを "環境変数" に代入してアプリケーションを作成しておりますので、環境変数を別の変数に代入し関数として別保管していきます
require 'rails_helper'
RSpec.describe "Users", type: :system do
before do
@user = FactoryBot.build(:user)
end
def basic_auth(path) # ここを追記
name = ENV["BASIC_AUTH_USER"]
password = ENV["BASIC_AUTH_PASSWORD"]
visit "http://#{name}:#{password}@#{Capybara.current_session.server.host}:# {Capybara.current_session.server.port}#{path}"
end
context 'ユーザー新規登録ができるとき' do
it '正しく情報を入力すれば新規登録ができる' do
# トップページに移動する
basic_auth root_path # ここも追記
visit root_path
# 以下省略
end
end
end
上段の追記箇所
def basic_auth(path)
ここでは、
①自身で設定した環境変数を変数に代入する処理
②visitを使って、BASIC認証のパスにアクセスしている
上記2点を処理させています
次の追記部分
basic_auth root_path
私はroot_pathからスタートさせる結合テストを記述しているのでこうなりました。
root_pathは引数になりますので、記述漏れがあるとエラーを起こしますよ!
さて、これで無駄なタイムアタックから脱しましたので、続きの結合テストコードを書くことにします
ありがとうございました!