🕵️♂️
assert_not_includesに気をつけろ!
minitestの話です。
先日とある不具合が発生し、流出原因を確認していました。
ちゃんとケースは存在したのですが、内容が不十分で流出してしまっていました。
流出原因: assert_not_includes だけで検証していた
assert_not_includesの仕様として、以下の検証はすべてパスします。
test "hoge" do
assert_not_includes [], 1
assert_not_includes [nil], 1
assert_not_includes [1], nil
end
「まぁそりゃそうだろう」とは思いますが、データがこうなっている時点でロジックが壊れている可能性が高いので、テストは失敗してほしいところです。
ちなみに今回はassert_not_includes [1], nil
の状態でした。
対策
テストで否定的検証をしたいときは発生し得るデータ状態を考慮した上で、多少わざとらしくてもかならず肯定的検証をセットで使うようにしたほうがよいなと思いました。
たとえばこんな感じ。
test "hoge" do
# 何らかの処理
assert fuga.present?
assert_not_includes hoge, fuga
end
株式会社ウェイブのエンジニアによるテックブログです。 弊社では、電子コミック、アニメ配信などのエンタメコンテンツを自社開発で運営しております! ve.jp/service/
Discussion