Skip to content

「状態」のテストと「振る舞い」のテスト #9

Open
@ttanimichi

Description

@ttanimichi

#8 に関連して。

あんまり良い例じゃない気がするんですけど、例えば User モデルで、重複する username のユーザーを登録できないという spec を書く場合、

  1. shoulda-matchers の validate_uniqueness_of を使って DB のテーブルにユニーク制約がはってあることをテストする
  2. User.save! が ActiveRecord::RecordNotUnique を吐くことをテストする
  3. save! の前後で users テーブルの件数に変化がないことをテストする( .not_to change 的なやつ)

みたいな感じで、何通りも spec の書き方がある気がするんですけど、どの書き方が良い spec なのか、という話です。

なんとなく 1 は「状態」のテストになっている気がして、「振る舞い」をテストしてる 2 の方が良い気がするんですけど、実際に DB のテーブルに insert されないことをテストしている 3 のほうが良いような気もするんですよね。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions