読者です 読者をやめる 読者になる 読者になる

valid?をfalseにしたくてerrors.addするのは何の意味もない

Rails

RSpecでvalid? #=> falseを期待したくてerrors.addするみたいなことやってたんだけど
ずっとtrueなのよ。もうなんなの!と思うじゃない


そこで、valid?何やってるか見に行くじゃない。そしたらなんなの!
activemodel-3.2.9/lib/active_model/validations.rb

189     # Runs all the specified validations and returns true if no errors were added
190     # otherwise false. Context can optionally be supplied to define which callbacks
191     # to test against (the context is defined on the validations using :on).
192     def valid?(context = nil)
193       current_context, self.validation_context = validation_context, context
194       errors.clear
195       run_validations!
196     ensure
197       self.validation_context = current_context
198     end

めっちゃclearしてんじゃん。clearしてからvalidationしてんじゃん。
というわけでちゃんとコンテキストをinvalidにしましょう