Christian Lescuyer
2008-Aug-07 18:44 UTC
[rspec-users] Can''t test for page content after a redirect
I''m trying to verify that data entered in a form has been saved in the database. Scenario: User enters a bookmark URL Given a bookmark ''http://www.gotapi.com/rubyrails'' When the user adds the bookmark Then should redirect to ''/'' And the page should contain ''http://www.gotapi.com/rubyrails'' The first test (should redirect) passes. The second fails. I understand why: the page that is analysed is a dummy page "You are being redirected." Is it possible to check data in the second page? Cheers Xtian -- Posted via http://www.ruby-forum.com/.
Zach Dennis
2008-Aug-07 18:54 UTC
[rspec-users] Can''t test for page content after a redirect
On Thu, Aug 7, 2008 at 2:44 PM, Christian Lescuyer <lists at ruby-forum.com> wrote:> I''m trying to verify that data entered in a form has been saved in the > database. > > Scenario: User enters a bookmark URL > Given a bookmark ''http://www.gotapi.com/rubyrails'' > When the user adds the bookmark > Then should redirect to ''/'' > And the page should contain ''http://www.gotapi.com/rubyrails'' > > The first test (should redirect) passes. The second fails. I understand > why: the page that is analysed is a dummy page "You are being > redirected." > > Is it possible to check data in the second page?What about something like: Scenario: User enters a bookmark URL Given I log in as a user When I add ''http://www.gotapi.com/rubyrails'' as a bookmark Then I should see that has the ''http://www.gotapi.com/rubyrails'' has been added to my bookmarks I''d imagine the steps to look something like: Given "I log in as a user" do # do whatever to login end When I add $url as a bookmark do |url| # fill out the new bookmmark form with the given url # after submitting form handle redirects follow_all_redirects end Then "I should see that has the $url has been added to my bookmarks" do |url| # response should have url somewhere on page end follow_all_redirects looks like: def follow_all_redirects if response.content_type == "text/html" follow_redirect! while response.redirect? elsif response.content_type == "text/javascript" if md=response.body.match(/window.location.href = "([^"]+)"/) get md.captures.first end end true end -- Zach Dennis http://www.continuousthinking.com http://www.mutuallyhuman.com
Christian Lescuyer
2008-Aug-07 21:07 UTC
[rspec-users] Can''t test for page content after a redirect
Thanks! I will try this tomorrow. Xtian -- Posted via http://www.ruby-forum.com/.
Christian Lescuyer
2008-Aug-08 17:29 UTC
[rspec-users] Can''t test for page content after a redirect
Thanks Zach! It worked like a charm. Finally I used: Scenario: User enters a bookmark URL When the user adds ''http://www.gotapi.com/rubyrails'' as a bookmark Then the database should have a bookmark with url ''http://www.gotapi.com/rubyrails'' And the page should contain ''http://www.gotapi.com/rubyrails'' and in bookmark_steps.rb: When "the user adds ''$string'' as a bookmark" do |string| post "/bookmarks/create", :bookmark => { :url => string } follow_all_redirects end Then "the database should have a bookmark with url ''$url''" do |url| Bookmark.find_by_url(url).should_not be_nil end Then "the page should contain ''$stuff''" do |stuff| response.should have_text(/#{stuff}/) end end def follow_all_redirects if response.content_type == "text/html" follow_redirect! while response.redirect? end true end I skipped the Javascript right now, I''ll add it when the time comes. Xtian -- Posted via http://www.ruby-forum.com/.