2011-10-07 4 views
11

요청 사양을 작성 중이며 "보고서»에이징 보고서"문자열이 있는지 테스트하고 싶습니다. 내가 직접 내 정규 표현식의 문자에 넣으면 나는 오류 (잘못된 멀티 바이트 문자를) 얻을, 그래서 나는이 시도 : 나는 '페이지 내용의 html 엔티티에 대한 Rspec 테스트

expected there to be content "Reports » Aging Reports" in "\n Reports » Aging Reports\n

: page.should have_content("Reports » Aging Reports")

이이 메시지와 함께 테스트에 실패를 시도가 성공하지 못한 .html_safe 같은 것을 시도했습니다. html 엔티티가 포함 된 텍스트를 테스트 할 수있는 방법이 있습니까?

편집 :

find('#breadcrumbs').text.should match(/Reports . Aging Reports/) : 나는 시간에 대한 해결 방법을 발견 <a href="/reports">Reports</a> &raquo; <a href="/aging_reports">Aging Reports</a>

+0

# in Gemfile gem 'sanitize' # in testfile require 'sanitize' html = Sanitize.clean(page.body.text) html.should have_content("Reports &raquo; Aging Reports") 
Zabba

+0

HTML은 실제로 »입니다. »은 시도한 » 엔티티의 또 다른 형태입니다.하지만 질문을 업데이트했습니다. – MWean

+0

RSpec이'»'을'»'로 변환하는 것 같습니다. 시험에서 실제 인물을 포함 시키십시오. – thomasfedb

답변

1

가되고 그 대신 문자열의 정규식을 사용

다음 HTML 소스의 관련 영역입니다

breadcrumbs div의 텍스트를 가져옵니다.이 텍스트에는 ' 찾고 있기 때문에 경기의 범위가 제한됩니다. 이 잘 작동하지만 특정 HTML 엔터티 일치하는 방법을 알고 싶습니다. 그게 내가 그 가장 우아한 솔루션입니다 모르겠어요 말했다와

breadcrumb = '<a href="/reports">Reports</a> &raquo; <a href="/aging_reports">Aging Reports</a>' 
page.body.should include(breadcrumb) 
expect(page.body).to include(breadcrumb) # rspec 2.11+ 

:

6

당신은 너무 페이지의 원시 소스의 테스트 모습을 가질 수 있습니다. 명시 적으로 HREF의 이동 경로 블록 내에서 찾고있는

within '.breadcrumb' do 
    page.should have_css('a', text: 'Reports') 
    page.should have_css('a', text: 'Aging Reports') 
    expect(page).to have_css('a', text: 'Reports') # rspec 2.11+ 
    expect(page).to have_css('a', text: 'Aging Reports') # rspec 2.11+ 
end 

이 방법 : 그냥 링크 사업부 내에서 존재의 유효성을 검사 할 수 귀하의 링크 주위 .breadcrumb라는 이름의 클래스가 가정.

3

html_safe 원하는 경우 HTML 태그가 제거되지 않습니다.

테스트하기 전에 html 태그를 제거하면 sanitize 보석을 사용할 수 있습니다. ... HTML 소스가`»`이 아닌`»`를 포함하고 있기 때문에 가능성이

page.should have_content("Reports » Aging Reports") 
0

때때로 가장 간단한 해결책은 바로 하나이며 일들이 바로 작동합니다. `»`대신`»`을 사용하도록 HTML을 변경하십시오. 실제 렌더링 된 HTML은 무엇입니까? HTML 소스의`»`부분인가, 아니면 HTML 소스의`»`으로 정의되어 있습니까? 소스 HTML을 보여주십시오. 하지만 "»"대신 "expected"가 왜 '»'으로 표시되는지 잘 모르겠습니다.