LoginSignup
0
1

More than 3 years have passed since last update.

Railsのテストコード時にBasic認証でエラーが出た時の対処法

Last updated at Posted at 2020-10-11

はじめに

今回はコントローラーの単体テストコード実装時に出た表題のエラーの件について記述したいと思います。ですがその前にまずはBasic認証について軽く説明したいと思います。

Basic認証とは

Webサイトにアクセス制限をかける方法の一つ。その中でも最も簡易的に制限をかけることができる方法がベーシック認証(Basic認証)です。ベーシック認証(Basic認証)はWebサーバーに付随している機能の1つでファイルに数行の記述をするだけで簡単にアクセス制限をかけることが可能です。

「Basic認証の参考画像」
Image from Gyazo

「引用させて頂いたサイト」
ベーシック認証(Basic認証)とは?設定方法と注意点・エラーになる原因を解説

エラー内容

それでは改めまして今回の本題について説明させて頂きます。
まず初めにコントローラーの単体テストコード実行時に下記のエラーが出ました。

ターミナル
bundle exec rspec spec/requests/items_spec.rb

~中略~

Failures:

  1) ItemsController GET /index indexアクションにリクエストすると正常にレスポンスが返ってくる
     Failure/Error: expect(response.status).to eq 200

       expected: 200
            got: 401

       (compared using ==)
     # ./spec/requests/items_spec.rb:28:in `block (3 levels) in <top (required)>'

  2) ItemsController GET /index indexアクションにリクエストするとレスポンスに出品済みの商品名が存在する
     Failure/Error: expect(response.body).to include @item.goods

       expected "HTTP Basic: Access denied.\n" to include "Custard Apples Daikon"
       Diff:
       @@ -1 +1 @@
       -Custard Apples Daikon
       +HTTP Basic: Access denied.

~中略~

エラー内容の検証

上記の内容から今回のエラーの原因の該当箇所と思われる部分は下記の2点です。

ターミナル
1)
       expected: 200
            got: 401

2)
expected "HTTP Basic: Access denied.\n" to include 

まず1つ目はexpectedで「200」(成功)を期待していますが実際のレスポンスは「401」(未認証)でしたという内容です。

そして2つ目の方でBasicという単語が出てるので設定していたBasic認証ではじかれているのだろうと仮定しました。
(まあ英語の内容(HTTP Basic: Access denied)もシンプルにHTTPのBasicでアクセスが拒絶されました。みたいな意味合いなので)

上記の2つのエラー内容から「application_controller.rb」内に設定していたBasic認証の部分を通れていないせいでテストコードが失敗したと判断しました。

そこで自分はテストコードの実行時だけは該当のBasic認証の部分をコメントアウトすることにしました。

application_controller.rb
class ApplicationController < ActionController::Base
  before_action :basic_auth (この行をコメントアウトする)

そして再度単体テストコードを実行

ターミナル
 bundle exec rspec spec/requests/items_spec.rb

ItemsController
  GET /index
    indexアクションにリクエストすると正常にレスポンスが返ってくる
    indexアクションにリクエストするとレスポンスに出品済みの商品名が存在する
    indexアクションにリクエストするとレスポンスに出品済みの商品の画像が存在する
    indexアクションにリクエストするとレスポンスに出品済みの商品の販売価格が存在する
    indexアクションにリクエストするとレスポンスに新規投稿商品一覧が存在する

Finished in 3.21 seconds (files took 4.76 seconds to load)
5 examples, 0 failures

上記の通り無事にテストコードを実行することが出来ました。

おわりに

調べているとBasic認証の部分を残したままでもテストコードを行う方法があるみたいだったのですが少し複雑そうだったため今回は簡単なこちらの方法にしてみました。

当記事で参考にさせて頂いたサイト

0
1
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
1