🖥

Rails | shoulda-matchers で Boolean 型のバリデーションを検証できない

2023/08/26に公開

問題

こんなモデルがあるとき

class Example < ActiveRecord::Base
  validates :Active, inclusion: { in: [ACTIVE_TYPES] }
end

Rspec で Boolean型のバリデーションを検証しようとすると

require 'rails_helper'

RSpec.describe Example, type: :model do
  it { is_expected.to validate_inclusion_of(:Active).in_array([true, false])  }
end

テストの削除をうながす警告が出る。

Warning from shoulda-matchers:

You are using `validate_inclusion_of` to assert that a boolean column
allows boolean values and disallows non-boolean ones. Be aware that it
is not possible to fully test this, as boolean columns will
automatically convert non-boolean values to boolean ones. Hence, you
should consider removing this test.

理由

「ActiveRecord が何でも Bloolean型にしてしまうので、結局ぜんぶテストが通るから意味ないよ」ってことっぽい?

Example.new(Active: 1)
# => #<Example:0x007f9f996fbe00 Active: true>

Example.new(Active: true)
# => #<Example:0x007f9f9b16f908 Active: true>

Example.new(Active: false)
# => #<Example:0x007f9f9cc92618 Active: false>

Example.new(Active: nil)
# => #<Example:0x007f9f9b1ce318 Active: nil>

Example.new(Active: 1)
# => #<Example:0x007f9f9cd7c9c0 Active: true>

Example.new(Active: 2)
# => #<Example:0x007f9f9daa34f0 Active: false>

Example.new(Active: 'TEXT')
# => #<Example:0x007f9f9cded3c8 Active: false>

環境

  • shoulda-matchers (3.1.1)
  • Rails 4.2.7.1

参考

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2017-02-24

Discussion