rspecでハマったので備忘録

rspecでテストを書こうとしたのですが、理解が浅いこともあり手間取ったのでメモを。

 

ブラウザ上のでは問題なく動いていた機能について、requestspecを以下のように書いたけれど http500のエラーが。。。なぜ?

describe 'GET#show' do
let(:user) {create(:user)}
let(:log) {create(:log, user_id: user.id)}
before do
user = create(:user)
end

it 'リクエスト' do
get log_path log.id
expect(response.status).to eq 200
end
end

 

エラーが起こっている状態を確認するために、一度処理を止めて確認

it 'リクエスト' do
get log_path log.id
binding.pry
expect(response.status).to eq 200
end

 

ターミナルから以下コマンドでhtmlファイルとして吐き出して確認すると

undefined method `strftime' for nil:NilClass のエラーが!

File.write("tmp/debug.html", response.body)

 

 

strftime・・・はて、なんだっけ?

 

確認すると、日付のカラムが空白になっていたことがエラーの原因でした。

ブラウザ上では登録時にselectタグを使っていて、強制的に何かしらの日付が選択される仕様でした。そのためvalidationをかけておらず、modelテストではエラーが出ずの状態。

 

開発環境とテスト環境が別物ということを改めて実感。開発環境であれやこれやいじって、だいぶ時間をとられました。

予想外の事態が起きたときは、やはりその環境下での状態を見なくちゃダメですね。。。。

参考サイト:https://qiita.com/SoarTec-lab/items/9214150bae70f4b590b2