RSpec Capybara 링크 이미지 테스트 (system spec)

9574 단어 RSpecRubyOnRails5.2
⭐️초학자입니다. 같은 쪽의 참고가 된다고 생각합니다.

⭐️상황



· 자신이 만든 포트폴리오에 system spec을 작성하고 있습니다.
· FactoryBot 사용
· 게시물을 게시 한 사용자의 프로필 이미지가 사용자 페이지로 전환하는 링크입니다.
· 테스트에서 ↑를 증명하고 싶습니다.
· 프로필 이미지 (Refile 사용 avatar_id) 오류 늪에서 빠져 나올 수 없습니다.

참고까지 설정 화상

spec/factories/users.rb
  FactoryBot.define do
    factory :user do
      name {"name_1"}
      avatar{"Rack::Test::UploadedFile.new(File.join(Rails.root,'app/assets/images/no_image.png'))"}
      sequence(:account_name, "account_1")
      sequence(:email, "[email protected]")
      password {"testchan"}
    end

spec/system/posts_spec.rb
  context "画面遷移の確認" do
    it "ユーザー名をクリックするとプロフィール画面へ遷移する" do
      click_link post.user.name
      visit user_path(user)
      expect(page).to have_content "こだわりさん information"
    end
    it "ユーザー画像をクリックするとプロフィール画面へ遷移する" do
      click_link post.user.avatar
      visit user_path(user)
      expect(page).to have_content "こだわりさん information"
    end

views
<%= attachment_image_tag(post, :image, size: "50x50", fallback: "no_postimage.jpg") %>
  <p><%= link_to post.content.truncate(45), post_path(post), style: "color: black;" %></p>
  <p>
    <%= link_to user_path(post.user) do %>
      <%= attachment_image_tag(post.user, :avatar, size: "30x30", class:"rounded-circle", fallback: "no_image.png") %><br>
      <span class="postuser" style="color:black;"><%= post.user.name %></span>
    <% end %>
    <span class="fas fa-comments">
      <%= post.post_comments.count %>
    </span>
    <span class="fas fa-hiking" style="color: #FF66CC;">
      <%= post.bravos.count %>
    </span>
  </p>
  <p><%= link_to "View Detail", post_path(post), class:"view-btn btn btn-light btn-lg btn-block" %></p>



테스트 결과



Ambiguous match, found 21 elements matching visible link nil

다중 요소 발견되었지만 링크가 없습니다. . .
이제 몇 시간 격투 끝에 Rspec에서 사용하는 Capybara 공식 문서에 이렇게 기술되었습니다.
이 내용은 teamcapybara/capybara에서 다음과 같이 설명됩니다.
> Clicking links and buttons
Full reference: Capybara::Node::Actions

You can interact with the webapp by following links and buttons. 
Capybara automatically follows any redirects, and submits forms associated with buttons.

click_link('id-of-link')
click_link('Link Text')
click_button('Save')
click_on('Link Text') # clicks on either links or buttons
click_on('Button Value')

유저 네임을 클릭해 유저 페이지에 천이 하는 테스트가 통과하고 있던 것은 “문자열”이었기 때문에.
클릭 링크는 이미지에 사용할 수 없었다는 것이 었습니다.
그래서 테스트와 view의 일부 다음과 같이 수정했습니다.

spec/system/posts_spec.rb

    it "ユーザー画像をクリックするとプロフィール画面へ遷移する" do
      click_link "#{post.user.name}さんのプロフィール画像"
      visit user_path(user)
      expect(page).to have_content "こだわりさん information"
    end

views
    <%= link_to user_path(post.user) do %>
      <%= attachment_image_tag(post.user, :avatar, size: "30x30", class:"rounded-circle", fallback: "no_image.png", :alt => "#{post.user.name}さんのプロフィール画像")) %><br>
      <span class="postuser" style="color:black;"><%= post.user.name %></span>
    <% end %>

무사히 테스트가 통과되었습니다

요약



클릭 링크가 이미지에 사용할 수 없었습니다.
거기서 alt 속성을 이미지에 갖게 해 click_link “alt 속성”으로 해결.
Alt 속성은 이미지를 읽지 못하면 텍스트로 이미지를 표시합니다.
원래 화상 표시시킬 때는 반드시 alt 속성을 붙이는 편이 좋은 것 같습니다.

보충



Capybara 공식 문서에도 있지만,
Click_link뿐만 아니라 click_on에서 시도한 것처럼 테스트를 통과했습니다.

참고



뭔가 지적해 주시면 부탁드립니다!
봐 주셔서 감사합니다.

좋은 웹페이지 즐겨찾기