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

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

ただいまの
回答率

90.48%

  • Ruby

    7919questions

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

  • Ruby on Rails 4

    2455questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Ruby on Rails チュートリアル8章8.58のテストエラーについて

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 768

ra-men

score 86

8章
リスト8.54の地点ではGreenだったのですが、「リスト8.57: 例外発生部分を削除する」地点まで進めたところRedになってしまいました。
これをGreenとするにはどうしたら良いでしょうか?
よろしくお願いします。

自分で検索したところ下記のページが見つかりましたが解決できませんでした。
http://etoh1220.hatenablog.com/entry/2015/12/31/123503
http://stackoverflow.com/questions/27671085/how-do-i-troubleshoot-this-error

チュートリアルページ

sessions_helper_test.rb

require 'test_helper'

class SessionsHelperTest < ActionView::TestCase

  def setup
    @user = users(:michael)
    remember(@user)
  end

  test "current_user returns right user when session is nil" do
    assert_equal @user, current_user
    assert is_logged_in?
  end

  test "current_user returns nil when remember digest is wrong" do
    @user.update_attribute(:remember_digest, User.digest(User.new_token))
    assert_nil current_user
  end
end

エラー

FAIL["test_current_user_returns_right_user_when_session_is_nil", SessionsHelperTest, 2016-05-19 19:08:28 +0000]
 test_current_user_returns_right_user_when_session_is_nil#SessionsHelperTest (1463684908.54s)
        --- expected
        +++ actual
        @@ -1 +1 @@
        -#<User id: 762146111, name: "Michael Example", email: "michael@example.com", created_at: "2016-05-20 07:33:04", updated_at: "2016-05-20 07:33:04", password_digest: "$2a$04$0Ad7qG5x.1uf4RB8F5b7o.HE.giJC1ARdUA9p0pUavC...", remember_digest: "$2a$04$/Qe6KUlJjlegrA2/9vWy7OUsM/fUmccrmgq7F9I7/WO...">
        +nil
        test/helpers/sessions_helper_test.rb:11:in `block in <class:SessionsHelperTest>'
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

このエラーは、SessionHelper モジュールの current_user メソッドが、ユーザー :michael を返すことを期待されているのに、nil が返ってきたことを意味しています。SessionHelper モジュールの current_user メソッドか、remember メソッドのどちらか(あるいは両方)に問題がありそうです。

まず、これらのメソッドの定義を確認してみてください。それでもわからなかったら、質問に、SessionHelper モジュールのソースコードを載せてもらえないでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/20 19:05

    # ユーザーを永続的セッションに記憶する
    def remember(user)
    user.remember
    cookies.permanent.signed[:user_id] = user.id
    cookies.permanent.signed[:remember_token] = user.remember_token

    この部分が正しくなかったようで
    cookies.permanent[:remember_token] = user.remember_token
    としたところGreenとなりました。
    的確なアドバイスありがとうございました。

    キャンセル

関連した質問

同じタグがついた質問を見る

  • Ruby

    7919questions

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

  • Ruby on Rails 4

    2455questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。