0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ruby テストコードについて(解決編)

Posted at

概要

以前質問もさせていただいた内容がアドバイスいただいた内容で改善したため、そのアウトプットを実施する

内容

コントローラーのテストコードにて、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'>[&quot;春休み&quot;, &quot;ひんかく&quot;, &quot;奉仕&quot;]</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 さん
アドバイスいただきありがとうございました!!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?