質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Capybara

Capybaraは、 Rubyで開発されているWebアプリケーションテストフレームワークです。Webブラウザ不要でブラウザ上のユーザー操作及びJavaScriptの挙動を自動化することができます。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

0回答

536閲覧

CapybaraでSystem SpecをしたときにAjaxで表示切り替えする箇所が更新されない

genki0126

総合スコア33

Capybara

Capybaraは、 Rubyで開発されているWebアプリケーションテストフレームワークです。Webブラウザ不要でブラウザ上のユーザー操作及びJavaScriptの挙動を自動化することができます。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2022/01/31 14:52

編集2022/01/31 14:55

概要

目標と課題を管理するWebアプリを開発中です。
作成された目標にコメントする機能があるのですが、
その部分のテストがうまく実装できていません。

問題

既存コメント付近の編集ボタンを押したときにAjaxでコメントを
フォームに入力されているような表示に切り替えるのですが、
Capybaraでテストを実行するとフォームの表示になりません。

ローカル環境で自分でクリックした場合は想定通りに表示が切り替わるので、
実装自体はできていると思われます。

実装

RSpec.describe "Comments", type: :system, js: true do scenario "コメントを編集できる" do goal = FactoryBot.create(:goal) comment = FactoryBot.create(:comment, goal: goal, user: goal.user) sign_in_as goal.user click_link goal.content find("a", id:"edit-comment").click fill_in "js-textarea-comment-#{comment.id}", with: "test comment modify" click_on "comment-update-button" expect(page).to have_content "test comment modify" end end

「js-edit-comment-button」クラスのaタグをクリックすると、
コメント部分がフォームに切り替わります

view

1 <div> 2 <a data-comment-id=<%= comment.id %> class="js-edit-comment-button" id="edit-comment"> 3 <i class="fas fa-edit text-primary"></i> 4 </a> 5 <%= link_to comment_path(comment.id), method: :delete, data: { confirm: "コメントを削除します。よろしいですか?"}, id: "remove-comment" do %> 6 <i class="fas fa-trash-alt text-primary"></i> 7 <% end %> 8 </div>

下記の処理で表示を切り替え

js

1 $(".js-edit-comment-button").on("click", function () { 2 console.log("called jquery") 3 const commentId = $(this).data('comment-id'); 4 const commentLabelArea = $('#js-comment-label-' + commentId); 5 const commentTextArea = $('#js-textarea-comment-' + commentId); 6 const commentButton = $('#js-comment-button-' + commentId); 7 8 commentLabelArea.hide(); 9 commentTextArea.show(); 10 commentButton.show(); 11 });

エラーログ

エラー箇所が「クリック後に表示されるフォームに対して入力する処理」であり、
「入力フォームが見つからない」というログが出ています。
そのため、編集ボタンはクリックできているが、表示が切り替わらず
フォームが表示されていないという状態だと考えています。

Failures: 1) Comments コメントを編集できる Failure/Error: fill_in "js-textarea-comment-#{comment.id}", with: "test comment modify" Capybara::ElementNotFound: Unable to find visible field "js-textarea-comment-175" that is not disabled [Screenshot]: tmp/screenshots/failures_r_spec_example_groups_comments_コメントを編集できる_762.png # /usr/local/bundle/gems/capybara-3.35.3/lib/capybara/node/finders.rb:303:in `block in synced_resolve' # /usr/local/bundle/gems/capybara-3.35.3/lib/capybara/node/base.rb:83:in `synchronize' # /usr/local/bundle/gems/capybara-3.35.3/lib/capybara/node/finders.rb:292:in `synced_resolve' # /usr/local/bundle/gems/capybara-3.35.3/lib/capybara/node/finders.rb:53:in `find' # /usr/local/bundle/gems/capybara-3.35.3/lib/capybara/node/actions.rb:91:in `fill_in' # /usr/local/bundle/gems/capybara-3.35.3/lib/capybara/session.rb:768:in `block (2 levels) in <class:Session>' # /usr/local/bundle/gems/capybara-3.35.3/lib/capybara/dsl.rb:58:in `block (2 levels) in <module:DSL>' # ./spec/system/comments_spec.rb:47:in `block (2 levels) in <top (required)>'

試したこと

・sleepでAjax処理が完了するまで待機
・aタグで実装している部分をbuttonタグに変更
・click_on,click_linkなどのクリック方法
・gem「poltergeist」の使用、phantomjsのインストール

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問