minoppp411
@minoppp411 (林 みのり)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

railsチュートリアル8章にてrails testが通らない

Q&A

Closed

解決したいこと

railsチュートリアル8章にてrails testが通らず困っています。
解決方法を教えていただけないでしょうか。

発生している問題・エラー

Error:
UsersLoginTest#test_login_with_valid_information_followed_by_logout:
NoMethodError: undefined method `log_in' for #<SessionsController:0x00000000009010>
Did you mean?  login_url
    app/controllers/sessions_controller.rb:9:in `create'
    test/integration/users_login_test.rb:23:in `block in <class:UsersLoginTest>'


rails test test/integration/users_login_test.rb:21

該当するソースコード

test/integration/users_login_test.rb
require 'test_helper'

class UsersLoginTest < ActionDispatch::IntegrationTest

  def setup
    @user = users(:michael)
  end

  test "login with valid email/invalid password" do
    get login_path
    assert_template 'sessions/new'
    post login_path, params: { session: { email:    @user.email,
                                          password: "invalid" } }
    assert_not is_logged_in?
    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
    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
end
app/controllers/session_controller.rb
class SessionsController < ApplicationController
  def new
  end

  def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user&.authenticate(params[:session][:password])
    # ユーザーログイン後にユーザー情報のページにリダイレクトする
      log_in user
      redirect_to user
    else
      flash.now[:danger] = 'Invalid email/password combination'
      render 'new'
  end
end

  def destroy
    log_out
    redirect_to root_url
  end
end

自分で試したこと

railsチュートリアルを描いた他人のコードを参考に修正しました。

よろしくお願いします。

0

1Answer

とりあえずエラーメッセージが出てるんで、翻訳する癖をつけたほうが良いと思います。
一回一回聞いてたらrailsの次のバージョンがでてしまいます。

「:」とかがついてると翻訳されにくいので、そういうのは外したり、コード的な部分は消したり、スペースで単語単語にしたりすればだいたい意味が分かる文章になると思います。

0Like

Your answer might help someone💌