頁面url是類似/people?search=name
而我使用current_path
水豚的方法它只返回/people
。如何使用查詢字符串獲得當前路徑使用水豚
current_path.should == people_path(:search => 'name')
但它沒有說
expected: "/people?search=name"
got: "/people"
我們怎樣才能把它傳遞?有沒有辦法做到這一點?
頁面url是類似/people?search=name
而我使用current_path
水豚的方法它只返回/people
。如何使用查詢字符串獲得當前路徑使用水豚
current_path.should == people_path(:search => 'name')
但它沒有說
expected: "/people?search=name"
got: "/people"
我們怎樣才能把它傳遞?有沒有辦法做到這一點?
我已更新此答案,以反映水豚的現代習俗。我認爲這是理想的,因爲這是可以接受的答案,並且在尋找解決方案時會提到很多人。隨着中說,來檢查當前路徑正確的方法是使用由水豚提供的has_current_path?
匹配,如記錄在這裏:Click Here
用法示例:
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)
感謝湯姆沃爾波爾指出這種方法。
正是我需要的。謝謝@nzifnab。 – kriysna 2011-03-09 11:15:52
我可能很快就需要這個語法,我正在爲遺留應用程序編寫測試。使用'current_path.should =='現在工作(儘管我需要添加一個尾隨的正斜槓作爲字符串)。我很感謝您提供我可能需要的代碼。 – Tass 2011-08-19 21:16:15
current_url,沒有看到。謝謝! – thatmiddleway 2013-04-16 18:25:14
我知道一個答案已被選中,但我只是想給一個替代解決方案。所以:
爲了獲取路徑和查詢字符串,就像在Rails的request.fullpath
,你可以這樣做:
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個字符)作爲URI.parse(current_url).request_uri
,但是可能更快,因爲有解析所涉及沒有明確的URI。
我已經做了拉請求,這在添加到水豚:https://github.com/jnicklas/capybara/pull/1405
如果'current_url'可能包含端口號,則這不起作用。例如。給定'http_foo.com:8888/some/path'的'current_url','current_url [current_host.size ..- 1]'等於':8888/some/path'。 此外,''current_host'後面的場景與@nzifnab在接受的答案中推薦的'URI.parse'邏輯類型相同。 – Tinynumbers 2015-01-29 14:36:42
剛剛更新了近代這個問題。當使用Capybara 2.5+時檢查current_paths的最佳做法是使用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)
如果想匹配的完整URL
expect(page).to have_current_path(people_url, url: true)
匹配器會將字符串與==或正則表達式進行比較以匹配
expect(page).to have_current_path(/search=name/)
'「/ people?search = name」'[不是路徑](http://en.wikipedia.org/wiki/URI_scheme#Generic_syntax)。 '「/ people」'是一條路徑 – 2013-05-10 10:52:43