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

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

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

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

Ruby on Rails 6

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

Ruby on Rails

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

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

Q&A

解決済

1回答

830閲覧

Rails Tutorial 13章 13.29テストがパスできず原因がわかりません.

sasaharukimedes

総合スコア27

Ruby

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

Ruby on Rails 6

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

Ruby on Rails

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

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

0グッド

0クリップ

投稿2020/06/11 14:37

編集2020/06/12 02:11

問題の概要

Rails Tutorial の13章13.29という箇所のテストにて, failureが発生してしまいます. ページタイトルに関して想定している描写がされない問題を抱えています. エラー文で検索をかけてもわからず, 皆様の知恵をお借りしたく初めて書き込みをさせていただきました. 何分初めての投稿なので, 情報不足等が見込まれますが, 適宜付け足しますのでどうぞお手柔らかにお願いします.

エラーメッセージ

Failure: UsersProfileTest#test_profile_display[~~~~/sample_app/test/integration/users_profile_test.rb:13]: <Michael Example | Ruby on Rails Tutorial Sample App> expected but was <User 19 | Ruby on Rails Tutorial Sample App>.. Expected 0 to be >= 1.

###コード類とファイル名

test/integration/users_profile_test.rb

require 'test_helper' class UsersProfileTest < ActionDispatch::IntegrationTest include ApplicationHelper def setup @user = users(:michael) end test "profile display" do get user_path(@user) assert_template 'users/show' assert_select 'title', full_title(@user.name) assert_select 'h1', text: @user.name assert_select 'h1>img.gravatar' assert_match @user.microposts.count.to_s, response.body assert_select 'div.pagination' @user.microposts.paginate(page: 1).each do |micropost| assert_match micropost.content, responce.body end end end

app/helpers/application_helper.rb

module ApplicationHelper def full_title(page_title = '') base_title = "Ruby on Rails Tutorial Sample App" if page_title.empty? base_title else page_title + " | " + base_title end end end

app/views/users/show.html.erb

<%= provide(:title, @user.name)%> <div class="row"> <aside class="col-md-4"> <section class="user_info"> <h1> <%= gravatar_for @user %> <%= @user.name %> </h1> </section> </aside> <div class="col-md-8"> <% if @user.microposts.any? %> <h3>Microposts (<%= @user.microposts.count %>)</h3> <ol class="microposts"> <%= render @microposts %> </ol> <%= will_paginate @microposts %> <% end %> </div> </div>

test/fixtures/users.yaml

michael: name: Michael Example email: michael@example.com password_digest: <%= User.digest('password') %> admin: true activated: true activated_at: <%= Time.zone.now %> archer: name: Sterling Archer email: duchess@example.gov password_digest: <%= User.digest('password') %> activated: true activated_at: <%= Time.zone.now %> lana: name: Lana Kane email: hands@example.gov password_digest: <%= User.digest('password') %> activated: true activated_at: <%= Time.zone.now %> malory: name: Malory Archer email: boss@example.gov password_digest: <%= User.digest('password') %> activated: true activated_at: <%= Time.zone.now %> non_activated: name: Non Activated email: non_activated@mail.com password_digest: <%= User.digest('password')%> activated: false activated_at: <%= Time.zone.now %> <% 30.times do |n| %> user_<%= n %>: name: <%= "User #{n}" %> email: <%= "user-#{n}@example.com" %> password_digest: <%= User.digest('password') %> activated: true activated_at: <%= Time.zone.now %> <% end %>

app/controllers/users_controller.rb

class UsersController < ApplicationController before_action :logged_in_user, only: [:index, :edit, :update, :destroy] before_action :correct_user, only: [:edit, :update] before_action :admin_user, only: :destroy def destroy User.find(params[:id]).destroy flash[:success] = "User deleted" redirect_to users_url end def index #@users = User.paginate(page: params[:page]) @users = User.where(activated: true).paginate(page: params[:page]) end def show @user = User.find_by(params[:id]) redirect_to root_url and return unless @user.activated? @microposts = @user.microposts.paginate(page: params[:page]) end def new @user = User.new end def create @user = User.new(user_params) # params[:user]実装は終わっていないことに注意! #マスアサインメント脆弱性 if @user.save @user.send_activation_email flash[:info] = "Please check your email to activate your account." redirect_to root_url else render 'new' end end def edit end def update if @user.update(user_params) flash[:success] = "Profile updated" redirect_to @user #更新に成功した場合に扱う else render "edit" end end private def user_params params.require(:user).permit(:name, :email, :password, :password_confirmation) end # beforeアクション # ログイン済みユーザーかどうか確認 def logged_in_user unless logged_in? store_location flash[:danger] = "Please log in." redirect_to login_url end end # 正しいユーザーかどうか確認 def correct_user @user = User.find(params[:id]) redirect_to(root_url) unless current_user?(@user) end #管理者かどうか確認 def admin_user redirect_to(root_url) unless current_user.admin? end end

試したこと

errorではなく, failureなのが気になりtypoより,メソッドや変数がうまく機能していないのかと思いましたが,うまく自分では発見できませんでした.エラー文で検索して以下の方の記事を見つけましたが, いまいち発見がありませんでした. 一応載せておきます.
Why is my rails test failing?

補足情報(FW/ツールのバージョンなど)

Ruby 2.6.5, Rails 6.0.3.1, Rails Tutorial 6版を使用しています

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

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

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

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

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

asm

2020/06/11 23:15

controllerはどうなっていますか?
sasaharukimedes

2020/06/12 02:13

@asm 特に怪しそうなところが見つけられなかったので, controllerを追加してみました.
guest

回答1

0

ベストアンサー

UsersController#show

@user = User.find_by(params[:id])

@user = User.find_by_id(params[:id])
もしくは
@user = User.find(params[:id])

です。

投稿2020/06/12 02:44

asm

総合スコア15149

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

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

asm

2020/06/12 03:03

個人的には、不正なidを入力された時に404にしたいので後者がオススメです。
sasaharukimedes

2020/06/12 04:55

ありがとうございました, 無事にパスできました!!本当にありがとうございました. Progateではfind_byが多く使われていたのでそっちに引っ張られて間違っていたようでした.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問