How to get current path with query string using Capybara

kriysna picture kriysna · Mar 8, 2011 · Viewed 78.6k times · Source

The page url is something like /people?search=name while I used current_path method of capybara it returned /people only.

current_path.should == people_path(:search => 'name')

But it fails saying

expected: "/people?search=name"
got: "/people"

How we can make it pass? Is there is any way to do this?

Answer

nzifnab picture nzifnab · Mar 8, 2011

I've updated this answer to reflect modern conventions in capybara. I think this is ideal since this is the accepted answer, and what many people are being referred to when looking for a solution. With that said, the correct way to check the current path is to use the has_current_path? matcher provided by Capybara, as documented here: Click Here

Example usage:

expect(page).to have_current_path(people_path(search: 'name'))

As you can see in the documentation, other options are available. If the current page is /people?search=name but you only care that it's on the /people page regardless of the param, you can send the only_path option:

expect(page).to have_current_path(people_path, only_path: true)

Additionally, if you want to compare the entire URL:

expect(page).to have_current_path(people_url, url: true)

Credit to Tom Walpole for pointing out this method.