tatsuya312
@tatsuya312 (TATSUYA OGIHARA)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Ruby コントローラーテストコードについて

解決したいこと

テストコードを作成しているのですが、コントローラーのテストコードがうまくいかないため改善したい

Ruby on Railsで記事を投稿するWebアプリを作成しました。
テストコードの実装を行なっているのですが、下記エラーが出てしまい、対策がわかりません。
解決方法を教えて下さい。

発生している問題・エラー

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

自分で試したこと

FactoryBotとFakerにて入力される文字を生成していて、エラー文の内容を見る限り
生成したデータはしっかりと反映されていて、その文字も認識されてはいるものの
「"春休み"」の"のせいなのかうまくresponse.bodyできていないように見えました。
ですので、Fakerの要素を変えたり、インライン要素じゃないものにしたりしましたが直らず。。。
何か気になる点あればご教示いただきたいです。

0

2Answer

htmlではダブルクオートがエスケープされてるからでしょうか
ダブルクオートのないタイトルで試してみては

1Like

Comments

  1. @tatsuya312

    Questioner

    ご回答ありがとうございます!そちらで確認してみます!

Fakerで生成される値をダブルクォーテーションなしで実施してみたら改善しました!
ありがとうございます!!

0Like

Your answer might help someone💌