답변:
capybara의 현대적인 규칙을 반영하기 위해이 답변을 업데이트했습니다. 나는 이것이 대답으로 받아 들여지고 솔루션을 찾을 때 많은 사람들이 언급하고 있기 때문에 이것이 이상적이라고 생각합니다. 현재 경로를 확인하는 올바른 방법은 has_current_path?
여기에 설명 된대로 Capybara에서 제공 하는 매처 를 사용하는 것입니다. 여기를 클릭 하십시오.
사용법 예 :
expect(page).to have_current_path(people_path(search: 'name'))
설명서에서 볼 수 있듯이 다른 옵션을 사용할 수 있습니다. 현재 페이지가 /people?search=name
있지만 /people
매개 변수에 관계없이 해당 페이지 에만 관심이 있다면 only_path
옵션을 보낼 수 있습니다.
expect(page).to have_current_path(people_path, only_path: true)
또한 전체 URL을 비교하려는 경우 :
expect(page).to have_current_path(people_url, url: true)
이 방법을 지적한 Tom Walpole의 의견입니다.
current_path.should ==
은 현재 작동 중입니다 (후행 슬래시를 문자열로 추가해야하지만). 필요한 코드에 대해 미리 감사드립니다.
URI.parse(current_url).request_uri
더 간결합니다. @Lasse Bunk의 답변을 참조하십시오.
ignore_query: true
only_path: true
전체 URL을 매개 변수와 비교하기 위해 _path 메소드를 _url로 바꿨습니다.
current_url.should == people_url(:search => 'name')
current_path
카피 바라의 최신 버전과 대조를 일치people_path(...)
현대 에이 질문을 업데이트하십시오. Capybara 2.5 이상을 사용할 때 current_paths를 확인하는 가장 좋은 방법은 current_path 매처를 사용하는 것입니다. current_path 매처는 Capybaras 대기 동작을 사용하여 경로를 확인합니다. request_uri (경로 및 쿼리 문자열)를 확인하려는 경우
expect(page).to have_current_path(people_path(:search => 'name'))
경로 부분 만 원할 경우 (쿼리 문자열 무시)
expect(page).to have_current_path(people_path, only_path: true) # Capybara < 2.16
expect(page).to have_current_path(people_path, ignore_query: true) # Capybara >= 2.16
전체 URL과 일치 시키려면
expect(page).to have_current_path(people_url, url: true) # Capybara < 2.16
expect(page).to have_current_path(people_url) # Capybara >= 2.16
매처는 == 또는 정규 표현식과 비교할 문자열을 가져옵니다.
expect(page).to have_current_path(/search=name/)
should
구문을 더 이상 사용하지 않습니다 . expect().to
앞으로 사양 에 사용하도록 노력해야합니다 .
only_path: true
지금ignore_query: true
답변이 선택되었음을 알고 있지만 대안 솔루션을 원했습니다. 그래서:
request.fullpath
Rails에서 와 같이 경로와 쿼리 문자열을 얻으려면 다음을 수행하십시오.
URI.parse(current_url).request_uri.should == people_path(:search => 'name')
다음과 같이 테스트 클래스에서 도우미 메소드를 수행 할 수도 있습니다 (예 ActionDispatch::IntegrationTest
:).
def current_fullpath
URI.parse(current_url).request_uri
end
도움이 되었기를 바랍니다.
편집 : Tinynumberes가 언급했듯이 포트 번호가있는 URL에서는 실패합니다. 다른 사람이 같은 훌륭한 아이디어를 가지고있는 경우를 대비하여 여기에 보관하십시오.
current_url[current_host.size..-1]
와 마찬가지로 정확히 35 자 (35 자)로 골프를 URI.parse(current_url).request_uri
하지만 명시적인 URI 구문 분석이 없기 때문에 잠재적으로 더 빠릅니다.
https://github.com/jnicklas/capybara/pull/1405 에서 Capybara에 이것을 추가하기위한 풀 요청을했습니다.
current_url
포트 번호가 포함되어 있으면 작동하지 않습니다 . 예를 들면 소정 current_url
의를 http://foo.com:8888/some/path
, current_url[current_host.size..-1]
동일 할 것이다 :8888/some/path
. 또한 무대 뒤에서 @nzifnab이 허용 된 답변에서 권장 current_host
하는 것과 동일한 종류의 URI.parse
논리를 수행합니다.
"/people?search=name"
경로가 아닙니다 ."/people"
경로입니다