rails tutorial第7章のエラーです。
現在rails tutorial第7章のUserのsignup統合テストを
vueとrailsのAPIモードを使って勉強中です。
userテーブルには
・id
・name
・email
・created_at
・updated_at
・password_digest
・gravatar_id
の合計7つのカラムがあります。
usersコントローラーは以下の通りです。
class UsersController < ApplicationController def show user = User.find(params[:id]) render json: user end def create gravatar_id = Digest::MD5::hexdigest(user_params[:email].downcase) gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}" user = User.new(name: user_params[:name], email: user_params[:email], password: user_params[:password], password_confirmation: user_params[:confirmation], gravatar_id: gravatar_url) if user.save render json: user else render json: user.errors.full_messages end end private def user_params params.permit(:name, :email, :password, :confirmation) end end
上記のコードのテストをするため以下のような統合テストで,
- create_actionでuserが新しく登録できているか
- 新しく登録したuserの詳細ページにアクセスできるか
を確認しようとしたところ、2を実行しようとしたところエラーが発生しました。
require "test_helper" class UsersSignupTest < ActionDispatch::IntegrationTest test "create_actionでuserが新しく登録できているか" do get 'http://localhost:8080/signup' assert_difference 'User.count', 1 do post users_path, params: { name: "hoge", email: "hoge@example.com", password: "foobar", confirmation: "foobar" } end end test "新しく登録したuserの詳細ページにアクセスできるか" do post users_path, params: { name: "hoge", email: "hoge@example.com", password: "foobar", confirmation: "foobar" } get 'http://localhost:8080/users/1' //ユーザーの詳細ページ end end
発生している問題・エラーメッセージ
UsersSignupTest#test_sucess_signup_information: ActiveRecord::RecordNotFound: Couldn't find User with 'id'=1 app/controllers/users_controller.rb:8:in `show' test/integration/users_signup_test.rb:20:in `block (2 levels) in <class:UsersSignupTest>' test/integration/users_signup_test.rb:18:in `block in <class:UsersSignupTest>'
上記のようなエラーコードとなっており、idが1のユーザーが見つかりませんと怒られている状態です。
試したこと
ブラウザにてユーザー登録を行い'http://localhost:8080/users/1’(ユーザーの詳細ページ)にアクセスしたところ、id=1の情報を取得できていました。
補足情報
バージョン情報
Rails 6.1.4.1
@vue/cli 4.5.13
また、以下のようなメソッドを用いてユーザー登録のリクエストを送っています。
<template> <!-- title --> <!-- error_message --> <!-- form --> <!-- submit button --> </template> <script> import axios from 'axios'; export default { data () { return { user: { name: '', email: '', password: '', confirmation: '' }, errors: '', } }, methods: { //このメソッドでusersコントローラのcreateアクションを起動しています。 signup: function() { this.errors = ''; axios .post('http://127.0.0.1:3000/users', this.user) .then(res => { if(res.data.id) { this.$router.push({name: 'UserDetailPage', params: { id: res.data.id } }) }else{ this.errors = res.data } }) } } } </script>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/09 05:55
2021/11/09 06:50