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

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

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

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

Ruby on Rails

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

0回答

627閲覧

返信機能実装 rails test error が解決できません。

yachiyo

総合スコア3

Ruby

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

Ruby on Rails

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/09/04 10:14

編集2021/09/05 20:25

前提・実現したいこと

rails tutorialが最後まで終わってで返信機能の実装している途中でした。

https://qiita.com/ac23811s/items/4db96b63158179b31a40
上記のサイトを参考に進めていましたが

rails testでエラーが出てしまい解決できなくなってしまいました。

どのような内容のエラーなのか、どのように解決すれば良いのか
教えて頂けたらより勉強になり助かります。

発生している問題・エラーメッセージ

FAIL["test_user_nick_name_test_in_index", #<Minitest::Reporters::Suite:0x000055c6077bb3d0 @name="SiteLayoutTest">, 1.5860779539998475] test_user_nick_name_test_in_index#SiteLayoutTest (1.59s) <Michael Example @Michael> expected but was <Michael Example @michael>.. Expected 0 to be >= 1. test/integration/site_layout_test.rb:43:in `block in <class:SiteLayoutTest>' ERROR["test_input_reply_to_id", #<Minitest::Reporters::Suite:0x000055c607f96ca8 @name="MicropostTest">, 2.4960221930000444] test_input_reply_to_id#MicropostTest (2.50s) NoMethodError: NoMethodError: undefined method `id' for nil:NilClass test/models/micropost_test.rb:34:in `block in <class:MicropostTest>' FAIL["test_micropost_reply", #<Minitest::Reporters::Suite:0x000055c60756c728 @name="MicropostsInterfaceTest">, 2.9545529110000643] test_micropost_reply#MicropostsInterfaceTest (2.96s) Expected /@Archer\ @Lana\ This\ micropost\ is\ test\ for\ reply./ to not match "<!DOCTYPE html>\n<html>\n <head>\n <title>Ruby on Rails Tutorial Sample App</title>\n \n\n\n<link rel=\"stylesheet\" media=\"all\" href= "/assets/application-18413e803aa17286e1dc07ffaa442fca6b46256ba3aee297f0e66afddac78028.css\" data-turbolinks- 省略:::コードの内容 <a href=\"/about\">About</a></li>\n <li><a href=\"/contact\">Contact</a></li>\n <li><a herf=\"https://news.railstutorial.org/\">News</a></li>\n </ul>\n </nav>\n</footer>\n \n </div>\n </body>\n</html>\n". test/integration/microposts_interface_test.rb:79:in `block in <class:MicropostsInterfaceTest>' FAIL["test_micropost_interface", #<Minitest::Reporters::Suite:0x000055c608118f18 @name="MicropostsInterfaceTest">, 3.308759449000263] test_micropost_interface#MicropostsInterfaceTest (3.31s) <Michael Example @Michael> expected but was <Sterling Archer @Archer>.. Expected 0 to be >= 1.

該当のソースコード

user.rb

1class User < ApplicationRecord 2 省略 3 4 5 #ニックネームは保存前に小文字にする 6 before_save :downcase_nick_name 7 #ユーザモデルにニックネームを追加 8 VALID_NICKNAME_REGEX = /\A[\w]+\z/i 9 validates :nick_name, presence:true, length:{maximum:15}, 10 format: {with: VALID_NICKNAME_REGEX }, 11 uniqueness: { case_sensitive: false } 12 13 省略 14 15 def feed 16 #スケールしたステータスフィードを返す 17 following_ids = "SELECT followed_id FROM relationships 18 WHERE follower_id = :user_id" 19 Micropost.where("user_id IN (#{following_ids}) OR user_id = :user_id",user_id: id) 20 .where(reply_to: [nil,""]) 21 .or(Micropost.where(reply_to: id).or(Micropost.where(reply_from: id))) 22 end 23 24 省略 25 26 27 private 28 29 def downcase_email 30 email.downcase! 31 end 32 33 def create_activation_digest 34 self.activation_token = User.new_token 35 self.activation_digest = User.digest(activation_token) 36 end 37 38 def downcase_nick_name 39 self.nick_name.downcase! 40 end 41 42end

microposts.controller.rb

1class MicropostsController < ApplicationController 2 before_action :logged_in_user, only: [:create, :destroy] 3 before_action :correct_user, only: :destroy 4 5 def create 6 @micropost = current_user.microposts.build(micropost_params) 7 #正規表現のフォーマット作成 8 nickname_regex = /@([\w]{1,15})/i 9 #正規表現にマッチするものを探す 10 @micropost.content.match(nickname_regex) 11 #あったらニックネームからユーザを探す、なければ$1がnilになる 12 if $1 13 reply_user = User.find_by(nick_name: $1.downcase) 14 #ユーザがいたらカラムにセット 15 @micropost.reply_to = reply_user.id if reply_user 16 @micropost.reply_from = current_user.id 17 end 18 省略 19 end 20 21   省略 22 23 private 24 25 def micropost_params 26 params.require(:micropost).permit(:content, :picture, :reply_to, :reply_from) 27 end 28 29 省略 30end

site_layout_test.rb

1require 'test_helper' 2 3class SiteLayoutTest < ActionDispatch::IntegrationTest 4 5 省略 6 7 def setup 8 @user = users(:michael) 9 end 10 11 省略 12 13 14 test "user nick_name test in index" do 15 log_in_as(@user) 16 get root_path 17 assert_select 'h1', text: "#{@user.name} @#{@user.nick_name}" 18 end 19end

micropost_test.rb

1require 'test_helper' 2 3class MicropostTest < ActiveSupport::TestCase 4 def setup 5 @user = users(:michael) 6 @micropost = @user.microposts.build(content: "Lorem ipsum") 7 end 8 9 省略 10 11 test "input reply_to id" do 12 #reply_toに宛先を入れる 13 reply_to = @user.microposts.build(content: "This is Reply Test", reply_to: @replyto.id, reply_from: @user.id) 14 #宛先が入っているか確認 15 assert_equal reply_to.reply_to, @replyto.id 16 assert_equal reply_to.reply_from, @user.id 17 end 18 19end

micropost_interface_test.rb

1require 'test_helper' 2 3class MicropostsInterfaceTest < ActionDispatch::IntegrationTest 4 5 def setup 6 @user = users(:michael) 7 @replyto = users(:archer) 8 @replyto2 =users(:lana) 9 end 10 11 省略 12 test "micropost reply" do 13 log_in_as(@user) 14 get root_path 15 # 有効な送信 16 content = "@#{@replyto.nick_name} @#{@replyto2.nick_name} This micropost is test for reply." 17 post microposts_path, params: { micropost: { content: content } } 18 19 get root_path 20 #送信者に表示されているかチェック 21 assert_match @user.microposts.first.reply_to.to_s, @replyto.id.to_s 22 assert_match @user.microposts.first.reply_from.to_s, @user.id.to_s 23 assert_match content, response.body 24 25 # 受信者に表示されているかチェック 26 log_in_as(@replyto) 27 get root_path 28 assert_match content, response.body 29 30 # 送信者のフォロワー/受信者のフォロワーに表示されていないかチェック 31 log_in_as(@replyto2) 32 get root_path 33        assert_match content, response.body 34 35 end 36end

試したこと

コードの見直し
エラーについて調べた

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問