I just have learnt how cool RSpec and Cabybara is, and now working around it to learn writing actual test.
I am trying to check if after clicking a link, there is a redirection to a specific page. Below is the scenario
1) I have a page /projects/list - I have an anchor with html "Back" and it links to /projects/show Below is the test i wrote in rspec describe "Sample" do describe "GET /projects/list" do it "sample test" do visit "/projects/list" click_link "Back" assert_redirected_to "/projects/show" end end end
The test fails with a failure message like below
Failure/Error: assert_redirected_to "/projects/show" ArgumentError: @request must be an ActionDispatch::Request
Please suggest me on how i should test the redirection and what am i doing wrong?
Try current_path.should == "/projects/show"
Capybara also implements a current_url
method for the fully qualified URL.
More info in the docs.
EDIT
Capybara now has a RSpec matcher called have_current_path, which you can use like: expect(page).to have_current_path(some_other_page_path)
(thanks @bjliu)
Im not sure that this can be what you need, but in my tests I prefer such approach:
...
subject { page }
...
before do
visit some_path_path
# do anything else you need to be redirected
end
it "should redirect to some other page" do
expect(page.current_path).to eq some_other_page_path
end
From the Devise wiki:
In Rails when a rack application redirects (just like Warden/Devise redirects you to the login page), the response is not properly updated by the integration session. As consequence, the helper assert_redirected_to won’t work.
Also this page has the same information: Rspec make sure we ended up at correct path
So you'll need to test that you're now on that URL, rather than test that you are being redirected to it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With