🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
TestNG

TestNGは、Javaのためのテスティングフレームワーク。JUnitとNUnitにインスパイアを受け開発されました。ユニットテストに限らず、機能テストや統合テストも行うことが可能です。

Ruby on Rails 5

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

Ruby

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

Q&A

解決済

2回答

5769閲覧

Rails Tutorial 11章 rails testが通りません。

takuma-yoshida

総合スコア11

TestNG

TestNGは、Javaのためのテスティングフレームワーク。JUnitとNUnitにインスパイアを受け開発されました。ユニットテストに限らず、機能テストや統合テストも行うことが可能です。

Ruby on Rails 5

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

Ruby

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

0グッド

1クリップ

投稿2018/08/16 15:58

皆さん、こんにちは。
Rails Tutorial第4版、11章を学習しています。
【リスト 11.3.2: editアクションで有効化】までテストが通るんですが
【リスト 11.34】のテストが通りません。

どなたか分かる方ご教示頂けますか?

以下がテストの結果です。

Running via Spring preloader in process 5627 Started with run options --seed 20968 Run options: --seed 20968--=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=--] 0% Time: 00:00:00, ETA: ??:??:?? # Running: .. 42/3: [========= ] 7% Time: 00:00:00, ETA: 00:00:. 42/4: [=========== ] 9% Time: 00:00:01, ETA: 00:00:1. 42/5: [============== ] 11% Time: 00:00:01, ETA: 00:00:1. 42/6: [================== ] 14% Time: 00:00:01, ETA: 00:00:0ERROR["test_login_with_remembering", Minitest::Result, 1.5397884330013767] test_login_with_remembering#Minitest::Result (1.54s) NoMethodError: NoMethodError: undefined method `remember_token' for nil:NilClass test/integration/users_login_test.rb:45:in `block in <class:UsersLoginTest>' E 42/6: [================== ] 14% Time: 00:00:01, ETA: 00:00:09 Error: UsersLoginTest#test_login_with_remembering: NoMethodError: undefined method `remember_token' for nil:NilClass test/integration/users_login_test.rb:45:in `block in <class:UsersLoginTest>' /usr/local/rvm/gems/ruby-2.4.0/gems/railties-5.1.4/lib/rails/test_unit/reporter.rb:70:in `method': undefined method `test_login_with_remembering' for class `Minitest::Result' (NameError) from /usr/local/rvm/gems/ruby-2.4.0/gems/railties-5.1.4/lib/rails/test_unit/reporter.rb:70:in `format_rerun_snippet' from /usr/local/rvm/gems/ruby-2.4.0/gems/railties-5.1.4/lib/rails/test_unit/reporter.rb:23:in `record' from /usr/local/rvm/gems/ruby-2.4.0/gems/minitest-5.11.3/lib/minitest.rb:803:in `block in record' from /usr/local/rvm/gems/ruby-2.4.0/gems/minitest-5.11.3/lib/minitest.rb:802:in `each' from /usr/local/rvm/gems/ruby-2.4.0/gems/minitest-5.11.3/lib/minitest.rb:802:in `record' from /usr/local/rvm/gems/ruby-2.4.0/gems/minitest-5.11.3/lib/minitest.rb:334:in `run_one_method' from /usr/local/rvm/gems/ruby-2.4.0/gems/minitest-5.11.3/lib/minitest.rb:321:in `block (2 levels) in run' from /usr/local/rvm/gems/ruby-2.4.0/gems/minitest-5.11.3/lib/minitest.rb:320:in `each' from /usr/local/rvm/gems/ruby-2.4.0/gems/minitest-5.11.3/lib/minitest.rb:320:in `block in run' from /usr/local/rvm/gems/ruby-2.4.0/gems/minitest-5.11.3/lib/minitest.rb:360:in `on_signal' from /usr/local/rvm/gems/ruby-2.4.0/gems/minitest-5.11.3/lib/minitest.rb:347:in `with_info_handler' from /usr/local/rvm/gems/ruby-2.4.0/gems/minitest-5.11.3/lib/minitest.rb:319:in `run' from /usr/local/rvm/gems/ruby-2.4.0/gems/railties-5.1.4/lib/rails/test_unit/line_filtering.rb:9:in `run' from /usr/local/rvm/gems/ruby-2.4.0/gems/minitest-5.11.3/lib/minitest.rb:159:in `block in __run' from /usr/local/rvm/gems/ruby-2.4.0/gems/minitest-5.11.3/lib/minitest.rb:159:in `map' from /usr/local/rvm/gems/ruby-2.4.0/gems/minitest-5.11.3/lib/minitest.rb:159:in `__run' from /usr/local/rvm/gems/ruby-2.4.0/gems/minitest-5.11.3/lib/minitest.rb:136:in `run' from /usr/local/rvm/gems/ruby-2.4.0/gems/minitest-5.11.3/lib/minitest.rb:63:in `block in autorun' from /usr/local/rvm/gems/ruby-2.4.0/gems/spring-2.0.2/lib/spring/application.rb:171:in `fork' from /usr/local/rvm/gems/ruby-2.4.0/gems/spring-2.0.2/lib/spring/application.rb:171:in `serve' from /usr/local/rvm/gems/ruby-2.4.0/gems/spring-2.0.2/lib/spring/application.rb:141:in `block in run' from /usr/local/rvm/gems/ruby-2.4.0/gems/spring-2.0.2/lib/spring/application.rb:135:in `loop' from /usr/local/rvm/gems/ruby-2.4.0/gems/spring-2.0.2/lib/spring/application.rb:135:in `run' from /usr/local/rvm/gems/ruby-2.4.0/gems/spring-2.0.2/lib/spring/application/boot.rb:19:in `<top (required)>' from /usr/local/rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /usr/local/rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require' from -e:1:in `<main>'

以下が実行環境です。

Running via Spring preloader in process 5647 About your application's environment Rails version 5.1.4 Ruby version 2.4.0-p0 (x86_64-linux) RubyGems version 2.6.8 Rack version 2.0.5 JavaScript Runtime Node.js (V8) Middleware Rack::Sendfile, ActionDispatch::Static, ActionDispatch::Executor, ActiveSupport::Cache::Strategy::LocalCache::Middleware, Rack::Runtime, Rack::MethodOverride, ActionDispatch::RequestId, ActionDispatch::RemoteIp, Sprockets::Rails::QuietAssets, Rails::Rack::Logger, ActionDispatch::ShowExceptions, WebConsole::Middleware, ActionDispatch::DebugExceptions, ActionDispatch::Reloader, ActionDispatch::Callbacks, ActiveRecord::Migration::CheckPending, ActionDispatch::Cookies, ActionDispatch::Session::CookieStore, ActionDispatch::Flash, Rack::Head, Rack::ConditionalGet, Rack::ETag Environment development Database adapter sqlite3 Database schema version 20180816133348

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

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

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

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

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

guest

回答2

0

ベストアンサー

こちらからコピペ

私 2018/08/15 19:26

test/integration/users_login_test.rbの
assigns(:user).remember_token
という部分が問題で、assigns(:user)でSessionControllerの@user変数を取れるのですが
SessionController#createで@userへの代入を行っていなかった為nilになってしまうのが問題です。

よって↑の方で記した改変を行えばこのエラーは消えるはずですよ

あなた 2018/08/15 19:39

【app/controllers/sessions_controller.rb】

def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
log_in user
params[:session][:remember_me] == '1' ? remember(user) : forget(user)
redirect_back_or user
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end


def create
@user = User.find_by(email: params[:session][:email].downcase)
if @user && @user.authenticate(params[:session][:password])
log_in @user
params[:session][:remember_me] == '1' ? remember(@user) : forget(@user)
redirect_back_or @user
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end

出来ました!!
上記に変更したらテストを無事通りました。

投稿2018/08/16 23:59

asm

総合スコア15149

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

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

takuma-yoshida

2018/08/17 12:57

asmさん コメントありがとうございます。 リスト 11.32をコピペしてそのまま貼り付けてしまったことが原因でした。 教えていただいたのに申し訳ございません。 次回からはコメントを残してエラーを防止しようと思います。
__Violet__

2020/01/10 08:38

I had exactly the same problem. Thank you for your post I fixed mine as well. I also reported this issue in their official slack channel.
guest

0

エラーログには、

test/integration/users_login_test.rb:45:in `block in <class:UsersLoginTest>'

と書かれていますよね。

test/integration/users_login_test.rbの45行目と、その前後には何を書かれていますか?

NoMethodError: undefined method `remember_token' for nil:NilClass

とも書かれているので、remember_tokenの変な書き方がされているのではないかと思われます。

投稿2018/08/16 17:23

takahashim

総合スコア1877

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

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

takuma-yoshida

2018/08/16 22:09 編集

エラーが出ているファイルを見てみたんでおかしいところはありますか? 【test/integration/users_login_test.rb】 require 'test_helper' class UsersLoginTest < ActionDispatch::IntegrationTest def setup @user = users(:michael) end test "login with invalid information" do get login_path assert_template 'sessions/new' post login_path, params: { session: { email: "", password: "" } } assert_template 'sessions/new' assert_not flash.empty? get root_path assert flash.empty? end test "login with valid information followed by logout" do get login_path post login_path, params: { session: { email: @user.email, password: 'password' } } assert is_logged_in? assert_redirected_to @user follow_redirect! assert_template 'users/show' assert_select "a[href=?]", login_path, count: 0 assert_select "a[href=?]", logout_path assert_select "a[href=?]", user_path(@user) delete logout_path assert_not is_logged_in? assert_redirected_to root_url # 2番目のウィンドウでログアウトをクリックするユーザーをシミュレートする delete logout_path follow_redirect! assert_select "a[href=?]", login_path assert_select "a[href=?]", logout_path, count: 0 assert_select "a[href=?]", user_path(@user), count: 0 end test "login with remembering" do log_in_as(@user, remember_me: '1') assert_equal cookies['remember_token'], assigns(:user).remember_token end test "login without remembering" do # クッキーを保存してログイン log_in_as(@user, remember_me: '1') delete logout_path # クッキーを削除してログイン log_in_as(@user, remember_me: '0') assert_empty cookies['remember_token'] end end
takahashim

2018/08/17 03:34

45行目は assert_equal cookies['remember_token'], assigns(:user).remember_token ですよね。 assigns(:user)がnilになってしまっているようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問