0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【rails6】結合テストコードでBASIC認証を通す方法

Last updated at Posted at 2021-05-04

こんばんは!
引き続きテストコードについて記載していきます

今日は結合テストコードです。まずはUserに関するテストコードを書いていくのですが…

現状

私のアプリケーションにはBASIC認証をかけていますので、何も対策しないとタイムアタックが開催されます

1e5a05d304368f4d3c6d3ec5e247a111.gif

手入力で間に合わせるのは至難の業です
というか、テストコードの意味がありません笑

そこで、テストコード内に ”BASIC認証を通す記述” を加えてあげれば良いのです

では記述していきましょう…

改善前の記述

spec/system/user_spec.rb
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つを "環境変数" に代入してアプリケーションを作成しておりますので、環境変数を別の変数に代入し関数として別保管していきます

spec/system/user_spec.rb
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は引数になりますので、記述漏れがあるとエラーを起こしますよ!

さて、これで無駄なタイムアタックから脱しましたので、続きの結合テストコードを書くことにします:runner_tone3:

ありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?