Capybara 쿼리로 보기 유효성 검사

4058 단어
Ruby on Rails로 시스템 테스트(또는 우리가 선호하는 a system spec )를 작성할 때 사용자의 관점에서 전체 스택을 실행하는 것입니다. 따라서 자연스럽게 특정 요소가 페이지에 있는지 확인하고 클릭할 때 예상대로 작동하는지 확인하고 입력하고 드래그해야 합니다. Capybara은 이를 위해 매우 잘 작동하여 HTML 쿼리를 위한 멋진 API를 제공합니다.

그러나 시스템 사양이 무겁습니다. 그들은 모든 것을 회전시켜야 합니다. 그들은 브라우저가 필요합니다. 사람이 여기저기 클릭하는 것보다 빠르지만 페이지가 로드되고 애니메이션이 완료되고 Promise가 해결될 때까지 기다려야 합니다. 가능하다면 view spec 을 사용하여 HTML에 데이터가 있는지 여부를 테스트하는 것이 훨씬 깔끔합니다. 템플릿에 필요한 것만 정확히 사용하고 적용 범위가 훨씬 덜 번거롭고 침습적이지 않도록 스터빙 또는 모킹만 하면 됩니다. 뷰 사양은 뷰 렌더링(및 문자열 반환)에 대해서만 걱정하면 되므로 전체 브라우저를 로드할 필요가 없습니다.

위에 링크된 Relish 문서에서도 많은 뷰 사양에 직선 텍스트 일치가 포함되어 있음을 알 수 있습니다. 더 구조화된 쿼리를 만드는 Rails'assert_select를 시도할 수 있지만 더 쉬운 솔루션이 있습니다.

Capybara.string 은 문자열을 쿼리 가능한 문서로 변환하는 매우 간단한 방법입니다. 특히 Capybara가 이미 설치되어 있는 경우(그리고 설치하지 않은 경우에도) 작업에는 오버헤드가 거의 없습니다.

it "renders the account link when signed in" do
  user = FactoryBot.build_stubbed(:user)
  assign(:current_user, user)

  render partial: "layouts/nav"

  doc = Capybara.string(rendered)
  expect(doc).to have_css("nav a[href='/users/#{user.id}']", text: "Account")
end

it "does not render the account link when signed out" do
  assign(:current_user, nil)

  render partial: "layouts/nav"

  doc = Capybara.string(rendered)
  expect(doc).to have_no_css("nav a", text: "Account")
end


모든 Capybara 매처에 액세스할 수 있으며 RSpec을 사용하면 사양을 매우 읽기 쉽게 만드는 멋진 변곡점을 얻을 수 있습니다. 그리고 render 는 이미 결과를 rendered 에 넣었기 때문에 Capybara.string 를 사용하여 사용 가능한 문서로 만드는 것이 매우 쉽습니다.

좋은 웹페이지 즐겨찾기