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

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

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

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

RSpec

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

Q&A

解決済

1回答

3522閲覧

Rails5 RSpec コントローラーのテスト rootにアクセスした時

tomie_t6

総合スコア13

Ruby on Rails 5

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

RSpec

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

0グッド

0クリップ

投稿2018/11/10 03:33

前提・実現したいこと

Rails5でRSpecを用いた、コントローラーのテストを書きたいのですが、localhost:3000(root)にアクセスした時のテストはどのように行えばよいのでしょうか?
httpのステータスコードが200になっていれば成功というテストを書きたいです。

コードの例を示してくれると助かります。
よろしくお願いします。

該当のソースコード

example_pages_controller.rb

ruby

1class ExamplePagesController < ApplicationController 2 def home 3 end 4end

routes.rb

ruby

1 root 'example_pages#home' 2

試したこと

example_pages_controller_spec.rb

ruby

1describe 'Access root' do 2 it 'http access success' 3 get :root 4 expect(response).to have_http_status(:success) 5 end 6end

###エラー
ActionController::UrlGenerationError:
No route matches {:action=>"root", :controller=>"example_pages"

補足情報(FW/ツールのバージョンなど)

エラーではコントローラーにrootアクションを定義していないことが問題のように言われている気がしますが...
example_pages_controllerにrootのアクションを定義はしないですよね(しても動きませんでした)

Rails 5.2.1
RSpec 3.8

  • rspec-core 3.8.0
  • rspec-expectations 3.8.2
  • rspec-mocks 3.8.0
  • rspec-rails 3.8.1
  • rspec-support 3.8.0

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

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

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

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

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

guest

回答1

0

ベストアンサー

describe "#home" do subject { get :home } it 'http access success' do is_expected.to have_http_status(:success) end end

このような感じでどうでしょうか。
controller specでは HTTPメソッド :コントローラのアクション名でリクエストできます
https://relishapp.com/rspec/rspec-rails/docs/controller-specs

subjectを使うとsubjectの返り値をis_expectedで受け取ることができます。テスト対象はsubjectに記述することが多いです。

subjectを使わない場合はこのようになります

describe "#home" do before { get :home } it 'http access success' do expect(response).to have_http_status(:success) end end

投稿2018/11/15 04:23

KiyoKuro

総合スコア51

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問