##はじめに
画像とテキストを投稿するRailsアプリケーションで、RSpecによるテストを行っていた。
アプリケーションの設計ではテキストがない場合はツイート(投稿)が出来ないようになっている。
##テスト内容
テキストなしの投稿は保存できない、という内容のテストで以下のコードを実行した。
spec/models/tweet_spec.rb
it 'テキストがないとツイートは保存できない' do
tweet = Tweet.new(text: "",image: "https://i.imgur.com/GL7igry.png")
tweet.valid?
expect(@tweet.errors.full_messages).to include("Text can't be blank")
end
ところが、テキスト欄を空白にしてもtweet.valid?はtrueを返しており、"Text can't be blank"のエラーが出力されなかった。
[1] pry(#<RSpec::ExampleGroups::Tweet::Nested::Nested_2>)> @tweet.valid?
=> true
[2] pry(#<RSpec::ExampleGroups::Tweet::Nested::Nested_2>)> @tweet.errors.full_messages
=> []
ここで@tweet.valid?がtrueになるということは、validationがうまく機能していない可能性があるので、該当するmodelを見直してみた。
##解決法
validationの記述がなかったため、エラーが発生していなかった。
以下を書き足してもう一度テストを行ったところ、無事"Text can't be blank"のエラーが出力された。
app/models/tweet.rb
validates :text, presence: true