복붙노트

[RUBY-ON-RAILS] 어떻게 카피 바라 2.0 페이지 제목을 테스트 할 수 있습니다?

RUBY-ON-RAILS

어떻게 카피 바라 2.0 페이지 제목을 테스트 할 수 있습니다?

페이지에 <제목> 내 제목 이 포함되어 있는지 테스트를 시도 :

# spec/features/reports_spec.rb
require 'spec_helper'

feature "Archive Management" do
  subject { page }

  describe "Index Page" do
    before(:all) { 10.times { FactoryGirl.create(:randomreport) } }
    after(:all) { Report.delete_all }

    describe "when no search terms present" do
      before { visit reports_path }

      it { should have_selector('title', text: 'My Title') } # <= Fails w/Capybara 2.0
      it { should have_selector('title') }                   # <= passes
      it { should have_text('My Title') }                    # <= passes
      it { should have_selector('h2', text: "Welcome") }     # <= passes
    end
  end
end

에러 메시지:

 Failure/Error: it { should have_selector('title', text: base_title) }
 Capybara::ExpectationNotMet:
   expected to find css "title" with text "My Title" but there were no matches. Also found "", which matched the selector but not all filters.

나는이 고통스럽게 명백한 내려다 해요하지만 그것이 무엇인지 알아낼 수 없습니다 알아? <제목> 태그는 더 이상 '선택자'로 간주하고 있습니까?!? 또는...?!?

편집 (디버거 정보) :

영리 @shioyama에 의해 제안 내가 디버거를 드롭 다운 경우는 page.body이 <제목> 내 제목 을 포함 분명하다. 내 제목 프로젝트 와 패스에

에 오신 것을 환영합니다를 포함하는 같은 page.body!

<제목> ... 태그가 아니라 그 안에 내 제목을 찾을 것으로 보인다. 그러나 내 제목에서 페이지 및 / 또는 내 제목 프로젝트에

오신 것을 환영합니다 나중에 내 제목을 찾을 않습니다 :

(rdb:1) p page
#<Capybara::Session>
(rdb:1) p page.body
"<!DOCTYPE html>\n<html>\n<head>\n<title>My Title</title>\n
<meta content='research, report, technology' name='keywords'>\n<meta 
content='Some Project' name='description'>\n<link href=\"/assets/application.css\"
...
</head>\n<body>\n<header class='navbar navbar-fixed-top 
navbar-inverse'>\n<div class='navbar-inner'>\n<div class='container'>\n
<a href=\"/\" class=\"brand\">My Title</a>\n<div class='pull-right'>\n
<ul class='nav'>\n<li><a href=\"/about\">About</a></li>\n<li><a href=\"/help\">Help</a>
</li>\n</ul>\n<form accept-charset=\"UTF-8\" action=\"/reports\" 
class=\"navbar-search\" method=\"get\"><div style=\"margin:0;padding:0;display:inline\">
<input name=\"utf8\" type=\"hidden\" value=\"&#x2713;\" /></div>\n
<input class=\"search-query\" id=\"query\" name=\"query\" 
placeholder=\"Search\" type=\"text\" />\n</form>\n\n</div>\n</div>\n</div>\n</header>\n\n
<div class='container'>\n<div class='hero-unit center'>\n<h1>My Title</h1>\n
<h2>Welcome to The My Title Project</h2>\n<p>Lorem ipsum dolor sit amet, consectetur 
adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 
...

? (... 텍스트 '제목') 실패 have_selector 이유를 알아 내기 위해 디버거에서 다른 무엇을 시도 할 수?

그래서, 카피 바라 2.0의 제목을 테스트하는 적절한 방법은 무엇입니까?

해결법

  1. ==============================

    1.내가 카피 바라 2.0로 업그레이드하고, Capybara.string를 사용하여 다음 사용자 정의 RSpec에 매처를 작성하여이를 해결하기 위해 관리 때 같은 문제가 있었다 :

    내가 카피 바라 2.0로 업그레이드하고, Capybara.string를 사용하여 다음 사용자 정의 RSpec에 매처를 작성하여이를 해결하기 위해 관리 때 같은 문제가 있었다 :

    사양 / 지원 / utilities.rb

    RSpec::Matchers::define :have_title do |text|
      match do |page|
        Capybara.string(page.body).has_selector?('title', text: text)
      end
    end
    

    이제 스펙 파일의 위치를 ​​주제 {페이지}, 내가 사용할 수 있습니다 :

    it { should have_title("My Title") }
    it { should_not have_title("My Title") }
    

    여담으로,이 문제에 관한 대화가이 답변에 저를 받고 매우 도움이되었다, 그래서 당신을 감사합니다!

    사용자 정의 RSpec에 매처를 작성하지 않으려면, 사용자가이 StackOverflow의 답변 덕분에 지금 당신이 보이지 않는 DOM 요소에 대한 테스트에 page.source (별칭 page.body)에 직접 have_selector 호출 할 수 있다는 것을 알고 dimuch :

    it "should show the correct title" do
      page.source.should have_selector('title', text: 'My Title')
    end
    

    어디서 주제 {페이지}

    its(:source) { should have_selector('title', text: 'My Title') }
    

    카피 바라 2.1에서이 내장되어 have_title /의 has_title? 매처 (matcher),이 답변에서 사용자 정의 RSpec에 매처의 필요성을 부정. 또한, 그 (: 소스) {...} 업데이트 1에 기재된 테스트 카피 바라 2.1 하에서 분해하는 것; 나는 have_title / has_title을 확인했습니다? 기대 작품으로, 그래서 당신이 업그레이드 계획이라면 다음과 같은 구문을 가고 아마도 최선의 방법 :

    때 대상 {페이지}

    it { should have_title("My Title") }
    it { should_not have_title("My Title") }
    

    는 IT / 시나리오 블록 내에서 구문 기대 사용하는 경우 :

    expect(page).to have_title("My Title")
    expect(page).to_not have_title("My Title")
    
  2. ==============================

    2.카피 바라 2.1 제목 요소를 쿼리에 대한 지원을 바 꾸었습니다. 그래서 "page.should의 have_selector 실패합니다 이런 식의 HTML 문서의 머리에 제목 요소에 대한 쿼리의 선택을 사용하여 ( '제목': 텍스트 => '텍스트를'). 내가 선호하는 방법 이해하는 바로는 카피 바라 2.1 새로운 API는 제목 요소가 작동해야 쿼리 사용 "page.should의 have_title ( '텍스트')"하는 것입니다.

    카피 바라 2.1 제목 요소를 쿼리에 대한 지원을 바 꾸었습니다. 그래서 "page.should의 have_selector 실패합니다 이런 식의 HTML 문서의 머리에 제목 요소에 대한 쿼리의 선택을 사용하여 ( '제목': 텍스트 => '텍스트를'). 내가 선호하는 방법 이해하는 바로는 카피 바라 2.1 새로운 API는 제목 요소가 작동해야 쿼리 사용 "page.should의 have_title ( '텍스트')"하는 것입니다.

  3. ==============================

    3.저도 같은 문제로 실행했을 때 업그레이드 카피 바라 버전 1.x에서> 2.0

    저도 같은 문제로 실행했을 때 업그레이드 카피 바라 버전 1.x에서> 2.0

    문제는 카피 바라가 정합 기의 보이지 않는 텍스트를 무시한다는 것입니다. 측정기에 표시 => 잘못된 옵션이 문제를 해결하는 가장 깨끗한 방법은을 사용하는 것입니다.

    EG

    그것은 {( '제목', 텍스트 : '내 제목', 눈에 보이는 : 거짓을) have_selector한다}

    또 다른 (글로벌) 옵션을 설정하는 것입니다 :

    Capybara.ignore_hidden_elements = 거짓

  4. ==============================

    4.어쩌면 때문에 다른 변경, 'shared_examples_for'를 사용할 때에만이 문제가 있었다. 나는 또한 페이지의 본문에 <제목> 내 제목 배치 (그것이 속하지 않는 및 렌더링되지 않습니다) 때 테스트가 통과 것으로 나타났습니다. 안 좋은 일이!

    어쩌면 때문에 다른 변경, 'shared_examples_for'를 사용할 때에만이 문제가 있었다. 나는 또한 페이지의 본문에 <제목> 내 제목 배치 (그것이 속하지 않는 및 렌더링되지 않습니다) 때 테스트가 통과 것으로 나타났습니다. 안 좋은 일이!

    이 일을 : 그것은 {have_title한다 ( "내 타이틀")}

    (카피 바라 2.1.0, Launchy에 2.3.0, 노코 기리 1.5.9, RSpec에 2.13)

  5. ==============================

    5.여기 두 가지 문제를 참조하십시오

    여기 두 가지 문제를 참조하십시오

    당신은 XPath는 선택기를 사용하여 이러한 두 가지 가능성 중 후자를 확인할 수 있습니다 have_xpath한다 ( "// 제목 [포함 ( '# {base_title}').]"). 이 패스는, 그때는 아마 have_selector을 일인가하는 제목 텍스트 주위에 약간의 공백이나 줄 바꿈이있는 경우 (나는 사람들을 무시 생각했지만, 내가 잘못 될 수 있음).

    희망이 도움이.

  6. ==============================

    6.나는이 이미 허용 답을 가지고 알고 있지만, 무엇의 가치를 위해, 당신은 코드의 적은 선에서, 다음을 수행 할 수 있습니다 :

    나는이 이미 허용 답을 가지고 알고 있지만, 무엇의 가치를 위해, 당신은 코드의 적은 선에서, 다음을 수행 할 수 있습니다 :

    title = first("head title").native.text
    expect(title).to == "What you expect it to match"
    

    이 기본 드라이버 요소에 액세스 할 수 있습니다; 카피 바라 2.0 (제목 브라우저를 제외하고 눈에 보이지 않는) 눈에 보이지 않는 텍스트를 무시 때문에, 당신이 필요 (또는 유사한 해결 방법)이 사건을 충족 할 수 있습니다. (https://github.com/jnicklas/capybara/issues/863 참조)

  7. from https://stackoverflow.com/questions/13573525/how-can-i-test-the-page-title-with-capybara-2-0 by cc-by-sa and MIT license