質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

5052閲覧

Rspecで500画面のテストの仕方について

mac_spec

総合スコア8

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2018/10/10 05:34

編集2018/10/11 04:23

こんにちは!
Rspecで自分でカスタムした500ページが表示されるかどうかのテストを書きたいのですが、
うまくいかず質問させていただきました!

発生しているエラー

Exception: Exception # ./spec/requests/errors_spec.rb:38:in `block (2 levels) in <top (required)>'

下記のerrors_spec.rbで意図的にExceptionエラーを発生させているのですが、RSpecがここで止まってしまって、これ以降の処理を実行してくれない状況です。

前提とソースコード

エラーハンドリングは以下の手順で行っています。

config/initializers/exceptions_app.rb

Rails.configuration.exceptions_app = ->(env) { ErrorsController.action(:show).call(env) }

app/controllers/errors_controller.rb

class ErrorsController < ActionController::Base rescue_from Exception, with: :render_500 rescue_from ActiveRecord::RecordNotFound, with: :render_404 rescue_from ActionController::RoutingError, with: :render_404 def show exception = request.env["action_dispatch.exception"] raise exception end private def locale_ja? params[:locale] == "ja" || I18n.default_locale == :ja end def render_500 if locale_ja? render template: "errors/500.ja", status: 500, layout: "application", content_type: "text/html" else render template: "errors/500.en", status: 500, layout: "application", content_type: "text/html" end end

errors_spec.rb

it "renders 500" do allow_any_instance_of(ErrorsController).to receive(:show).and_return(raise Exception) expect(response).to render_template("errors/500.ja") end

なにかいいアディアがございましたらご教授ください!
よろしくお願いします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

rb

1allow_any_instance_of(ErrorsController).to receive(:show).and_raise Exception

投稿2018/10/11 04:39

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mac_spec

2018/10/11 13:19 編集

ご回答ありがとうございます。 教えていただいた通り、RSpecを下記のように修正し実行したのですが、 ErrorsControllerのrescue_from Exception, with: :render_500が機能しておらず、 エラーを検知できていない状況です。 再度何かいい解決策がございましたらご教授いただけると幸いです! よろしくお願いします! ``` allow_any_instance_of(ErrorsController).to receive(:show).and_raise Exception get root_path expect(response).to render_template("errors/500.ja") ```
asm

2018/10/11 13:42

よく考えたらExceptionを発生させるのは ErrorControllerじゃ意味がないですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問