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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby on Rails 5

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

Q&A

1回答

2143閲覧

Rspecでcssを見つけてくることができない

AK12

総合スコア32

Ruby on Rails 5

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

0グッド

0クリップ

投稿2019/07/16 13:28

下記内容のテストが実施できません
find(".relation-btn_#{other_user.id}").click_button 'フォロー解除'
上記の部分がエラーのようです。

spec/integration/relationship_spec.rb

require 'rails_helper' describe 'フォロー機能', type: :system do let!(:user){FactoryBot.create(:user,name:'一般ユーザー')} let!(:other_user){FactoryBot.create(:user,name:'その他ユーザー')} let(:active_relationship) do user.active_relationships.create( follower_id: user.id, followed_id: other_user.id ) end let(:passive_relationship) do user.passive_relationships.create( follower_id: other_user.id, followed_id: user.id ) end context 'フォロー時' do it 'フォロワー一覧に名前がある' do active_relationship visit following_user_path(user) expect do find(".relation-btn_#{other_user.id}").click_button 'フォロー解除' sleep 2 end.to change(Relationship, :count).by(-1) end end end

spec/integration/relationship_spec.rb

FactoryBot.define do factory :relationship do follower_id { 1 } followed_id { 1 } end end

エラー

1) フォロー機能 フォロー時 フォロワー一覧に名前がある Failure/Error: find(".relation-btn_#{other_user.id}").click_button 'フォロー解除' Capybara::ElementNotFound: Unable to find css ".relation-btn_4" # ./spec/integration/relationship_spec.rb:42:in `block (4 levels) in <top (required)>' # ./spec/integration/relationship_spec.rb:41:in `block (3 levels) in <top (required)>'

試したこと

save_and_open_pageを実行した際に、すべての内容が読み込まれていない気がして、
following_user_path(user)の部分のviewに記述を加えて見ました

app/views/users/show_follow.html.slim

= render 'users/profile', user:@user = render 'users/tab', user:@user div class="relation-btn_4" = render @users

すると、エラー内容が以下に変わりました。

1) フォロー機能 フォロー時 フォロワー一覧に名前がある Failure/Error: find(".relation-btn_#{other_user.id}").click_button 'フォロー解除' Capybara::ElementNotFound: Unable to find button "フォロー解除" that is not disabled within #<Capybara::Node::Element tag="div" path="/html/body/div[1]/div[2]"> # ./spec/integration/relationship_spec.rb:42:in `block (4 levels) in <top (required)>' # ./spec/integration/relationship_spec.rb:41:in `block (3 levels) in <top (required)>'

おそらく、renderの部分が読み込まれる前に、テストが実施されているのかと思うのですが、
これはそういうものなのでしょうか。
それとも、何か設定を変えることで、全て読み込まれた状態でテストができるのでしょうか。

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

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

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

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

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

guest

回答1

0

こんにちは。

save_and_open_pageを実行した際に、すべての内容が読み込まれていない気がして、

とありますが、この処理が何かは、上記だけでは分からないので、推測だけになります。
そのほかの部分に関しても推測になりますが...。
(公開できる範囲で提示していただけるといいかなあと思います)

まずは、Integratonテストは、ヘッドレス(ブラウザを立ち上げない形)で実施していますか?
ブラウザが立ち上がるモードで、Capybaraの処理が想定どおりのブラウザ操作をしているか確認されましたでしょうか?

Ajaxでの非同期処理で、あとから部分的に読み込まれる要素に対しては、タイミングで要素が読み込めない場合があります。Ajaxでの読み込みが完了するのを待って、要素を抽出ということをしたりします。

また、読み込みをしたタイミングでも、要素がDisableであったり、非表示(display: none;)だったりすると、やはりCapybaraでの要素抽出がうまくいかなかったりします。

全て表示された段階んHTMLを確認し、CSSセレクタ上問題がなく、非表示だったりdisableでなければ、タイミングの関係かと思います。

投稿2019/07/17 23:15

suama

総合スコア1997

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問