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

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

ただいまの
回答率

87.49%

テストのエラーの解決ができず困っています。

解決済

回答 1

投稿

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

score 3

モデルの単体テストを行っているのですが、ターミナルの下記のエラーが解決できません。
思い当たることはほとんど試したのですが、ご教授いただければと思います。

User
  #create
    userを登録できる場合
      name、email、passwordとpassword_confirmationが存在する
      passwordが6文字以上であれば
    userを登録できない場合
      nameがない事 (FAILED - 1)
      emailがない事 (FAILED - 2)
      passwordがない事 (FAILED - 3)
      passwordが存在してもpassword_confirmationがない事 (FAILED - 4)
      重複したemailが存在する事 (FAILED - 5)
      passwordが5文字以下である事 (FAILED - 6)

Failures:

  1) User#create userを登録できない場合 nameがない事
     Failure/Error: expect(user.errors[:name]).to include("can't be blank")
       expected [] to include "can't be blank"
     # ./spec/models/user_spec.rb:22:in `block (4 levels) in <top (required)>'

  2) User#create userを登録できない場合 emailがない事
     Failure/Error: expect(user.errors[:email]).to include("can't be blank")
       expected ["を入力してください"] to include "can't be blank"
     # ./spec/models/user_spec.rb:28:in `block (4 levels) in <top (required)>'

  3) User#create userを登録できない場合 passwordがない事
     Failure/Error: expect(user.errors[:password]).to include("can't be blank")
       expected ["を入力してください"] to include "can't be blank"
     # ./spec/models/user_spec.rb:34:in `block (4 levels) in <top (required)>'

  4) User#create userを登録できない場合 passwordが存在してもpassword_confirmationがない事
     Failure/Error: expect(user.errors[:password_confirmation]).to include("doesn't match Password")
       expected ["とパスワードの入力が一致しません"] to include "doesn't match Password"
     # ./spec/models/user_spec.rb:40:in `block (4 levels) in <top (required)>'

  5) User#create userを登録できない場合 重複したemailが存在する事
     Failure/Error: expect(another_user.errors[:email]).to include("has already been taken")
       expected ["はすでに存在します"] to include "has already been taken"
     # ./spec/models/user_spec.rb:49:in `block (4 levels) in <top (required)>'

  6) User#create userを登録できない場合  passwordが5文字以下である事 
     Failure/Error: expect(user.errors[:password]).to include("is too short (minimum is 6 characters)")
       expected ["は6文字以上で入力してください"] to include "is too short (minimum is 6 characters)"
     # ./spec/models/user_spec.rb:55:in `block (4 levels) in <top (required)>'

Finished in 0.40026 seconds (files took 5.01 seconds to load)
8 examples, 6 failures

Failed examples:

rspec ./spec/models/user_spec.rb:19 # User#create userを登録できない場合 nameがない事
rspec ./spec/models/user_spec.rb:25 # User#create userを登録できない場合 emailがない事
rspec ./spec/models/user_spec.rb:31 # User#create userを登録できない場合 passwordがない事
rspec ./spec/models/user_spec.rb:37 # User#create userを登録できない場合 passwordが存在してもpassword_confirmationがない事
rspec ./spec/models/user_spec.rb:43 # User#create userを登録できない場合 重複したemailが存在する事
rspec ./spec/models/user_spec.rb:52 # User#create userを登録できない場合  passwordが5文字以下である事 
FactoryBot.define do
  factory :user do
    password = Faker::Internet.password(min_length: 8)
    name {Faker::Name.last_name}
    email {Faker::Internet.free_email}
    password {password}
    password_confirmation {password}
  end
end
require 'rails_helper'

RSpec.describe User, type: :model do
  describe '#create' do
    context 'userを登録できる場合' do
      it "name、email、passwordとpassword_confirmationが存在する" do
        user = build(:user)
        expect(user).to be_valid
      end

      it " passwordが6文字以上であれば " do
        user = build(:user, password: "000000", password_confirmation: "000000")
        expect(user).to be_valid
      end
    end  


    context 'userを登録できない場合' do
      it "nameがない事" do
        user = build(:user, name: nil)
        user.valid?
        expect(user.errors[:name]).to include("can't be blank")
      end

      it "emailがない事" do
        user = build(:user, email: nil)
        user.valid?
        expect(user.errors[:email]).to include("can't be blank")
      end

      it "passwordがない事" do
        user = build(:user, password: nil)
        user.valid?
        expect(user.errors[:password]).to include("can't be blank")
      end

      it "passwordが存在してもpassword_confirmationがない事" do
        user = build(:user, password_confirmation: "")
        user.valid?
        expect(user.errors[:password_confirmation]).to include("doesn't match Password")
      end

      it "重複したemailが存在する事" do
        #はじめにユーザーを登録
        user = create(:user)
        #先に登録したユーザーと同じemailの値を持つユーザーのインスタンスを作成
        another_user = build(:user, email: user.email)
        another_user.valid?
        expect(another_user.errors[:email]).to include("has already been taken")
      end

      it " passwordが5文字以下である事 " do
        user = build(:user, password: "00000", password_confirmation: "00000")
        user.valid?
        expect(user.errors[:password]).to include("is too short (minimum is 6 characters)")
      end
    end
  end
end

``

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

2〜6は、エラーを日本語で書いてください。
※アプリで日本語化しているためです。

1は、たぶんvalidatesの書き忘れではないでしょうか?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/09/30 15:37

    返事遅くなり申し訳ありません。
    おっしゃられた通りにすると解決することができました!
    ありがとうございました!

    キャンセル

  • 2020/09/30 17:53

    それは良かったです!

    キャンセル

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

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

関連した質問

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