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

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

ただいまの
回答率

90.84%

ruby on railsのエラーが解決できない

解決済

回答 2

投稿 編集

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

kinu221

score 13

rails初心者です。
ruby on railsにてrails testを実行すると下記のエラーが表示されます。
どこが間違っているのかわからないので、アドバイスをいただけますか?
<環境>
cloud9

<エラー>
method': undefined method test_should_get_home' for class `Minitest::Result' (NameError)

<ソースコード>
[static_pages_controller_test]
require 'test_helper'
class StaticPagesControllerTest < ActionDispatch::IntegrationTest

def setup
@base_title = "Ruby on Rails Tutorial Sample App"
end

test "should get root" do
get root_url
assert_response :success
end

test "should get home" do
get root_path
assert_response :success
assert_select "title", "Ruby on Rails Tutorial Sample App"
end

test "should get help" do
get help_path
assert_response :success
assert_select "title", "Help | Ruby on Rails Tutorial Sample App"
end

test "should get about" do
get about_path
assert_response :success
assert_select "title", "About | Ruby on Rails Tutorial Sample App"
end

test "should get contact" do
get contact_path
assert_response :success
assert_select "title", "Contact | Ruby on Rails Tutorial Sample App"
end
end

[routes.rb]
Rails.application.routes.draw do
root 'static_pages#home'
get  '/help',    to: 'static_pages#help'
get  '/about',   to: 'static_pages#about'
get  '/contact', to: 'static_pages#contact'
get  '/signup',  to: 'users#new'
end

[static_pages_controller]
class StaticPagesController < ApplicationController
def home
end

def help
end

def about
end

def root
end

def contact
end
end

[contact.html.erb]
<% provide(:title, 'Contact') %>
<h1>Contact</h1>
<p>
Contact the Ruby on Rails Tutorial about the sample app at the
<a href="https://railstutorial.jp/contact">contact page</a>.
</p>

[home.html.erb]
<div class="center jumbotron">
<h1>Welcome to the Sample App</h1>

<h2>
This is the home page for the
<a href="https://railstutorial.jp/">Ruby on Rails Tutorial</a>
sample application.
</h2>

<%= link_to "Sign up now!", signup_path, class: "btn btn-lg btn-primary" %>
</div>

<%= link_to image_tag("rails.png", alt: "Rails logo"),
'http://rubyonrails.org/' %>

[user_test.rb]
require 'test_helper'

class UserTest < ActiveSupport::TestCase

def setup
@user = User.new(name: "Example User", email: "user@example.com",
password: "foobar", password_confirmation: "foobar")
end
test "should be valid" do
assert @user.valid?
end

test "name should be present" do
@user.name = "     "
assert_not @user.valid?
end

test "email should be present" do
@user.email = "     "
assert_not @user.valid?
end

test "name should not be too long" do
@user.name = "a" * 51
assert_not @user.valid?
end

test "email should not be too long" do
@user.email = "a" * 244 + "@example.com"
assert_not @user.valid?
end

test "email validation should accept valid addresses" do
valid_addresses = %w[user@example.com USER@foo.COM A_US-ER@foo.bar.org
first.last@foo.jp alice+bob@baz.cn]
valid_addresses.each do |valid_address|
@user.email = valid_address
assert @user.valid?, "#{valid_address.inspect} should be valid"
end
end

test "email validation should reject invalid addresses" do
invalid_addresses = %w[user@example,com user_at_foo.org user.name@example.
foo@bar_baz.com foo@bar+baz.com]
invalid_addresses.each do |invalid_address|
@user.email = invalid_address
assert_not @user.valid?, "#{invalid_address.inspect} should be invalid"
end
end

test "email addresses should be unique" do
duplicate_user = @user.dup
duplicate_user.email = @user.email.upcase
@user.save
assert_not duplicate_user.valid?
end

test "email addresses should be saved as lower-case" do
mixed_case_email = "Foo@ExAMPle.CoM"
@user.email = mixed_case_email
@user.save
assert_equal mixed_case_email.downcase, @user.reload.email
end

test "password should be present (nonblank)" do
@user.password = @user.password_confirmation = " " * 6
assert_not @user.valid?
end

test "password should have a minimum length" do
@user.password = @user.password_confirmation = "a" * 5
assert_not @user.valid?
end
end

お手数ですが、ご回答よろしくお願い致します。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • Shara

    2018/01/21 09:05

    home.html.erb のソースも記載をお願い出来ますか?

    キャンセル

  • kinu221

    2018/01/21 13:54

    ご連絡ありがとうございます。承知致しました。質問内容に追記致しました。

    キャンセル

回答 2

checkベストアンサー

+1

とりあえず

undefined method 云々 for class `Minitest::Result' (NameError)

というエラー自体は minitest のバグに起因するようです。
下記への回答に書きましたので,ご参照ください。
Ruby - minitestでテストが失敗したとき1 runs, 2 assertions, 1 failures...というような表示が出ない(110066)|teratail

そこに書いたとおり,本件では minitest に issue が立っています。

ちなみに minitest と railties のバージョンはいくつですか。
このバージョンの組み合わせでテストが死ぬようです。minitest 5.11.0 もしくは 5.11.1 と railties 5.1.4 の組み合わせで死にます。

調べた範囲では,このような現象が起こるのは,テストが failed だったか,エラーを出したときです。
なので,undefined method というメッセージの前にテストの失敗かエラーかのメッセージがでてると思うのですが,出てませんか?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/01/22 22:21

    ご回答ありがとうございます。

    >undefined method というメッセージの前にテストの失敗かエラーかのメッセージがでてると思うのですが,出てませんか?
    →以下のエラーの内容がありましたので、記載致します。
    ERROR["test_email_addresses_should_be_unique", Minitest::Result, 0.04406130802817643]
    test_email_addresses_should_be_unique#Minitest::Result (0.04s)
    NoMethodError: NoMethodError: undefined method `password_digest=' for #<User:0x00000005119748>
    Did you mean? password=
    test/models/user_test.rb:6:in `setup'

    E 19/0: [ ] 0% Time: 00:

    Error:
    UserTest#test_email_addresses_should_be_unique:
    NoMethodError: undefined method `password_digest=' for #<User:0x00000005119748>
    Did you mean? password=
    test/models/user_test.rb:6:in `setup'
    minitestによるエラーだと思います。

    > minitest と railties のバージョンはいくつですか。
    gem listで確認しましたがrailtiesとminitestのバージョンは表示されませんでした。
    gemfileで設定しているtestの内容は以下になります。
    group :test do
    gem 'rails-controller-testing', '1.0.2'
    gem 'minitest-reporters', '1.1.14'
    gem 'guard', '2.13.0'
    gem 'guard-minitest', '2.4.4'
    end
    お手数ですが、アドバイスをお願い致します。

    キャンセル

  • 2018/01/23 00:17

    password_digest= が無いと言っていますね。
    User に password_digest というカラムはありますか。
    また,gem list で出てこないのは変ですね。

    キャンセル

  • 2018/01/23 15:50

    御回答ありがとうございます。
    User に password_digest というカラムはありますか。
    >あります。どこでミスっているのかわからないです。
    def change
    add_column :users, :password_digest, :string
    end

    gem list で出てこないのは変ですね。
    >gemfileの設定がうまくいっていないと出るとの情報がありましたので、
    もう一度installし直してみます。

    キャンセル

  • 2018/01/23 18:02

    とりあえず minitest のバグに関しては Gemfile に
    gem "minitest", "5.10.3"
    とかってダウングレードしてやればエラーは出なくなると思います。
    直るまではこれでしのぐといいかもしれません。

    キャンセル

  • 2018/01/23 23:19

    御回答ありがとうございます。
    minitestのバグは解消したと思います。
    ただ、下記のエラーが取れないので苦戦しています。
    アドバイスをいただけると幸いです。
    Running via Spring preloader in process 23999
    Started with run options --seed 23549

    Run options: --seed 23549--=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=-] 0% Time: 00:00:00, ETA: ??:??:??

    # Running:

    . 16/2: [======================= ] 12% Time: 00:00:00, ETA: 00:00:0.. 16/4: [================================================= ] 25% Time: 00:00:00, ETA: 00:00:... 16/7: [===================================================================================== ] 43% Time: 00:00:00, ETA: 00:00... 16/10: [========================================================================================================================== ] 62% Time: 00:00:00, ETA: 00:00 FAIL["test_should_get_about", StaticPagesControllerTest, 0.5537721600849181]
    test_should_get_about#StaticPagesControllerTest (0.55s)
    <About | Ruby on Rails Tutorial Sample App> expected but was
    <Ruby on Rails Tutorial Sample App>..
    Expected 0 to be >= 1.
    test/controllers/static_pages_controller_test.rb:19:in `block in <class:StaticPagesControllerTest>'

    F 16/11: [====================================================================================================================================== ] 68% Time: 00:00:00, ETA: 00:00:00

    Failure:
    StaticPagesControllerTest#test_should_get_about [/home/ubuntu/workspace/sample_app/test/controllers/static_pages_controller_test.rb:19]:
    <About | Ruby on Rails Tutorial Sample App> expected but was
    <Ruby on Rails Tutorial Sample App>..
    Expected 0 to be >= 1.


    bin/rails test test/controllers/static_pages_controller_test.rb:16

    . 16/14: [============================================================================================================================================================================ ] 87% Time: 00:00:00, ETA: 00:00:0 FAIL["test_layout_links", SiteLayoutTest, 0.5785298310220242]
    test_layout_links#SiteLayoutTest (0.58s)
    Expected exactly 2 elements matching "a[href="/"]", found 0..
    Expected: 2
    Actual: 0
    test/integration/site_layout_test.rb:8:in `block in <class:SiteLayoutTest>'

    16/16: [=====================================================================================================================================================================================================] 100% Time: 00:00:00, Time: 00:00:00
    F

    Failure:
    SiteLayoutTest#test_layout_links [/home/ubuntu/workspace/sample_app/test/integration/site_layout_test.rb:8]:
    Expected exactly 2 elements matching "a[href="/"]", found 0..
    Expected: 2
    Actual: 0


    bin/rails test test/integration/site_layout_test.rb:5


    Finished in 0.57945s
    16 tests, 29 assertions, 2 failures, 0 errors, 0 skips



    Finished in 0.629311s, 25.4246 runs/s, 46.0821 assertions/s.
    16 runs, 29 assertions, 2 failures, 0 errors, 0 skips

    キャンセル

  • 2018/01/23 23:26

    一見では分かりませんでした。別の話に移ったので,改めて質問を立てられては。
    その際,コードは ``` で正しく囲ってください。新しい質問を作るときコードの書き方がサンプルで出てきます。

    キャンセル

  • 2018/01/24 11:37

    承知致しました。その様に致します。ここまで丁寧に御回答いただきありがとうございます。

    キャンセル

0

気になった点をいくつか挙げます。

  1. home.html.erb に書かれている、signup_path が、
    routes.rb に定義されていないように見えます。
     
  2. home.html.erb に書かれている、rails.png は、存在しているでしょうか。
     
  3. test/fixtures の中に、xxxx.yml があれば、何か記載されていないでしょうか。
    testを実行する際、xxx.ymlのデータを読み込んで、データ登録をしてからtestが行われるようなので、xxx.ymlのテストデータ定義に誤りがあると、エラーになることがあります。

一度、確認してみては如何でしょうか。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/01/22 17:33

    御回答ありがとうございます。
    セルフチェックを行いましたが問題ないように思います。
    1についてget '/signup', to: 'users#new'が該当すると思います。
    2についてapp/assets/imagesに格納してあります。
    3についてusers.ymlには何も記載していません。(参考にしている資料にコードを削除するようにあったので。)

    キャンセル

  • 2018/01/22 17:39

    申し訳ないです。
    1についてコードが抜けていました。追記しました。
    エラーは似たような記載でした。
    undefined method `test_email_addresses_should_be_unique' for class `Minitest::Result' (NameError)
    user_test.rbに記載しているテストコードによってエラーが発生していると思うのでソースコードを追記致しました。

    キャンセル

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

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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