問題の概要
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版を使用しています
回答1件
あなたの回答
tips
プレビュー