概要
以前質問もさせていただいた内容がアドバイスいただいた内容で改善したため、そのアウトプットを実施する
内容
コントローラーのテストコードにて、response.bodyでHTMLの要素を確認したいにも関わらず
値が取得できないというエラーが表示されました。
テスト用のデータはFactoryBot+Fakerにて生成しており
テストコードのエラーを確認しても値自体は生成できていることは確認できました。
具体的なエラーとコード
発生している問題・エラー
Failure/Error: expect(response.body).to include(@article.title)
expected "<!DOCTYPE html>\n<html>\n <head>\n <title>GoalF</title>\n \n \n <meta name=\"viewport\"...ter\">\n <div class=\"copy-light\">\n <p>© Goalf</p>\n </div>\n</footer>\n </body>\n</html>\n" to include "[\"春休み\", \"ひんかく\", \"奉仕\"]"
Diff:
@@ -1,78 +1,155 @@
-["春休み", "ひんかく", "奉仕"]
***省略***
<h2 class='article-title'>["春休み", "ひんかく", "奉仕"]</h2>
***省略***
該当するソースコード
require 'rails_helper'
RSpec.describe "Articles", type: :request do
before do
@article = FactoryBot.create(:article)
end
describe 'GET #index' do
it 'indexアクションにリクエストすると正常にレスポンスが返ってくる' do
get root_path
expect(response.status).to eq 200
end
it 'indexアクションにリクエストするとレスポンスに投稿済みのツイートのテキストが存在する' do
get root_path
expect(response.body).to include(@article.title)
end
it 'indexアクションにリクエストするとレスポンスに投稿検索フォームが存在する' do
get root_path
expect(response.body).to include('記事を検索する')
end
end
end
提案いただいた内容と改善策
提案内容
HTMLはダブルクォーテーションを表示しないため、エラーコードからもそこが問題になっているのではないかということをアドバイスを頂けましたので、FactoryBotのFakerの値を変更することにした
変更前
FactoryBot.define do
factory :article do
association :user
title { Faker::Lorem.words }
content { Faker::Lorem.sentence }
url { Faker::Lorem.sentence }
category_id { Faker::Number.within(range: 2..7) }
after(:build) do |item|
item.image.attach(io: File.open('public/images/item-sample.png'), filename: 'item-sample.png')
end
end
end
変更後
FactoryBot.define do
factory :article do
association :user
title { Faker::Lorem.sentence }
content { Faker::Lorem.sentence }
url { Faker::Lorem.sentence }
category_id { Faker::Number.within(range: 2..7) }
after(:build) do |item|
item.image.attach(io: File.open('public/images/item-sample.png'), filename: 'item-sample.png')
end
end
end
するとなんとエラーが改善しました!!
こういった内容はあまりオンラインスクールで習わなかったので、改善して良かったです。
まとめ
質問の記事の書き方が良かったかどうかは自信はありませんでしたが、
わからないことも現状と疑問点をしっかりと伝えることが大事だと思いました。
PS
@YumaInaura さん
アドバイスいただきありがとうございました!!!