🦔

RspecのNil location provided. Can't build URI.が発生した原因

2022/08/13に公開

ポートフォリオ作成中に起きたエラーをまとめようと思いました。

とあるモデルのデータをfactoryを使用して作成していました。

 FactoryBot.define do
  factory :insect do
    name { "アブラゼミ" }
    catch_copy { "夏の訪れを感じさせてくれる、1週間の命" }
  end
end

他にもカラムが存在しますがテストに必要最低限のカラムだけを使用することにしました。
※他のカラムにはpresence: trueとNotNull制約は付与していないためバリデーションには引っかかりません。

insectモデルにはアップローダー用のtext型を保存するカラムが存在し、今回このカラムが原因でエラーが起きていました。

system specで何度insectデータを作成してもテスト内で505ページに遷移をしてしまいます。
下の記載でエラーページに遷移するようにしていた為、エラーの原因がわかりませんでした笑

config/environments/test.rb

config.consider_all_requests_local = false
config.action_dispatch.show_exceptions = true

一度デフォルトのエラーが表示される記載に戻してあげてエラー分を確認してみると

Nil location provided. Can't build URI.

が発生していました。

アップローダーはCarrierwaveを使用し
ビューファイルに記載をしている画像のurlがエラーの原因だと思いました。

= image_tag insect.insect_img.url, #insect.insect_img >nilに対してurlを呼び出していた...

factoryのテストデータに画像の情報を持たせてあげればテストが通ります。

FactoryBot.define do
  factory :insect do
    name { "アブラゼミ" }
    catch_copy { "夏の訪れを感じさせてくれる、1週間の命" }
    insect_img { Rack::Test::UploadedFile.new(Rails.root.join("spec/fixtures/images/download.png")) }
  end
end

テスト環境でエラーページの確認のためにenvironments/test.rbを変更している場合は気をつけないといけないことをいけません。僕ぐらいだとお思いますが笑

Discussion