U_OK_2023’s blog

主に日々のプログラミング学習についてのアウトプットと備忘録

【モデル単体テスト】other_than【選択が「---」の時は保存できない】

皆様、こんにちわ。

U_OK_2023 です。

 

本日は、オリジナルアプリの実装について書いていこうと思います。

タスク投稿機能におけるモデル単体テスト

テストをモデルに対し、バリデーションを設定し、
そのバリデーションが実行されるかをテストします。

テストをする前に、実装に必要なバリデーションが設定されているかを確認する。

app/models/task.rb

    class Task < ApplicationRecord
  extend ActiveHash::Associations::ActiveRecordExtensions
  
  ~ 中略 ~
  
  #ジャンルの選択が「---」の時は保存できないようにする
  validates :category_id, numericality: { other_than: 1 ,message: "can't be blank"}

end

category_id は アソシエーションを組んだものではなく、
Activehash を実装した際に指定したidです。

other_than: 1 だと、
エラーメッセージが表示されるようにバリデーションを設定しています。

1 は プルダウンが表示される時に、「---」が初期値として
表示されているものですから、
1 (「---」)以外を必ず選択してください。という意味になります。

app/models/category_id

    class Category < ActiveHash::Base
  self.data = [
    { id: 1, name: '---' },
    { id: 2, name: '見積書' },
    { id: 3, name: '会議資料' },
    { id: 4, name: '納品書' },
    { id: 5, name: '発注書' },
    { id: 6, name: '社内資料' },
    { id: 7, name: '雑務' },
    { id: 8, name: 'その他' },
  ]

  include ActiveHash::Associations
  has_many :tasks

end

other_than: 1 とは { id: 1, name: '---' }, のことです。

異常系では、何も記入しないこと(空白)を指定する時、
「''」を使用しますが、
Activehashでは、初期値が設定されるため何も記入しなくても
1 (もしくは 0)が必ず選択されている状態です。
そのため、空白を意味する「''」は使用することはできません。
したがって、ather_than を使用します。
プログラミングスクールでプルリクエストを依頼した際に、
Activehashを使用した場合、何も選択しないのは「''」ではない。
と指摘していただき、混乱したことを思い出します。
あの経験があるからこそ、今の説明ができます。

間違うことは悪いことではないと改めて思います。

 

ここだけ注意し、後は、正常系からテストしていきました。

現在の位置と、そこでの記述の意味、受け渡しの関連性は、
とても大切だと改めて感じました。

 

今回もお読みいただきありがとうございました。