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

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

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

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

Q&A

解決済

1回答

3079閲覧

rails integration test の assert_template でFailする場合の原因または原因調査方法を知りたい

pebble8888

総合スコア390

Ruby on Rails

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

0グッド

0クリップ

投稿2016/05/29 13:45

###前提・実現したいこと
rails初心者です。
rails4.2.2でrailsアプリを作っています。
こちらのサイトを参考にしていますがログイン周りは独自の修正を入れています。
http://railstutorial.jp/chapters/sign_up?version=4.2#cha-sign_up

ログインのintegration testを実行した時に、Failするのですが、表示されるエラーメッセージだけだと、何が起こっているのか分かりません。
テストコードに何らかのデバッグログ出力を埋め込んで、原因を調べたいのですが、
どのように記述していけば良いのか、分かりません。

モデルのテストであれば、
assertの2番目の引数に、モデルの変数.errors.full_messagesを表示することで原因を特定できたのですが、
@user,@sessionどちらもnilのようでした。

メッセージ内容を見ると、例外が発生しているように見えます。

ブラウザでログイン操作をしている際はログイン成功時、失敗時ともに画面上は問題なく動作しているように見えます。

どのように原因を調べていくのが良いのでしょうか?

###発生している問題・エラーメッセージ

/develop/hoge/test/integration (master *%>)$ rake test (in /develop/hoge) Run options: --seed 22374 # Running: .........F................ Finished in 3.334764s, 8.3964 runs/s, 14.0940 assertions/s. 1) Failure: UsersSigninTest#test_signin_with_invalid_information [/develop/hoge/test/integration/users_signin_test.rb:8]: expecting <"sessions/new"> but rendering with <["rescues/_trace", "routes/_route", "routes/_table", "rescues/_request_and_response", "rescues/routing_error", "rescues/layout"]>

###該当のソースコード
sessions_controller.rb

ruby

1class SessionsController < ApplicationController 2 def new 3 redirect_to root_url if signed_in? 4 end 5 6 def create 7 user = User.find_by(email: params[:session][:email]) 8 if !user then 9 user = User.find_by(name: params[:session][:email]) 10 end 11 if user && user.authenticate(params[:session][:password]) 12 sign_in user 13 redirect_back_or shops_path 14 else 15 flash.now[:danger] = 'Invalid email or name / password combination' 16 render 'new' 17 end 18 end 19end

users_signin_test.rb

ruby

1require 'test_helper' 2 3class UsersSigninTest < ActionDispatch::IntegrationTest 4 test "signin with invalid information" do 5 get signin_path 6 assert_template 'sessions/new' 7 post_via_redirect signin_path, session: { email: "", password: "" } 8 assert_template 'sessions/new' # <- Line8 fail... 9 assert_not flash.empty? 10 get root_path 11 assert flash.empty? 12 end 13end

###補足情報(言語/FW/ツール等のバージョンなど)
rails4.2.2
ruby 2.1.2p95
rubymineなどのIDEは使っていません。

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

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

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

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

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

guest

回答1

0

自己解決

一部、自己解決しました。
/develop/hoge/log/develope.logに詳細なエラーログが出力されており、routing errorが原因だったようです。これで、調査が進められそうです。
テストなのでtest.logに出力されるものだと勘違いしていました。

Started POST "/signin" for 127.0.0.1 at 2016-05-29 23:32:40 +0900 ActionController::RoutingError (No route matches [POST] "/signin"): test/integration/users_signin_test.rb:7:in `block in <class:UsersSigninTest>' Rendered /Users/pebble8888/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/actionpack-4.2.2/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (1.9ms)

ただ、test実行時の画面にこの詳細ログを出力する方法があれば、知りたいです。
-> この件も分かりました。
以下をtestの途中に記載すると応答のHTMLが全て出力されました。

puts assert_select "*"

投稿2016/05/29 14:43

編集2016/05/30 14:24
pebble8888

総合スコア390

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問