Erik Pukinskis
2009-Mar-16 23:35 UTC
[rspec-users] Is there any way to use a second webrat session temporarily?
Dear Rspecucumberatubyists, I have a Rails app that creates subdomains, and I''d like to verify them in a cucumber feature like so: When I visit http://blingo.myapp.com Then I should see "Welcome to blingo!" The trouble is, webrat''s visit method strips the domain off, and keeps only the path, so it ends up going to my site root instead of the subdomain. I tried creating a separate mechanize session that is used for full urls: require ''webrat/mechanize'' Given /^I visit (.*)$/ do |url| if url.match(/^http:\/\//) session = Webrat::MechanizeSession.new session.visit(url) response = session.response.body else visit url end end And that seems to work, but then when my "Then" step goes to find the response, it doesn''t find anything. The "response" variable becomes nil somewhere along the way. The step that''s matching there is the default one that ships with cucumber: Then /^I should see "([^"]*)"$/ do |text| response.should contain(text) end Why is my response getting erased? Love, Erik
Matt Wynne
2009-Mar-17 13:53 UTC
[rspec-users] Is there any way to use a second webrat session temporarily?
On 16 Mar 2009, at 23:35, Erik Pukinskis wrote:> Dear Rspecucumberatubyists, > > I have a Rails app that creates subdomains, and I''d like to verify > them in a cucumber feature like so: > > When I visit http://blingo.myapp.com > Then I should see "Welcome to blingo!" > > The trouble is, webrat''s visit method strips the domain off, and keeps > only the path, so it ends up going to my site root instead of the > subdomain. > > I tried creating a separate mechanize session that is used for full > urls: > > require ''webrat/mechanize'' > > Given /^I visit (.*)$/ do |url| > if url.match(/^http:\/\//) > session = Webrat::MechanizeSession.new > session.visit(url) > response = session.response.body > else > visit url > end > end > > And that seems to work, but then when my "Then" step goes to find the > response, it doesn''t find anything. The "response" variable becomes > nil somewhere along the way. The step that''s matching there is the > default one that ships with cucumber: > > Then /^I should see "([^"]*)"$/ do |text| > response.should contain(text) > end > > Why is my response getting erased? > > Love, > ErikI think response is a method or read-only property, set by webrat when you call #visit, so it''s not something you can just set like that. I would have a look in the webrat source code and see if you can figure out why the subdomain is being stripped out of the request. I have a feeling I remember someone asking about this before. Also note that webrat has its own mailing list on google groups which might be a better place to find answers. HTH, Matt Wynne http://blog.mattwynne.net http://www.songkick.com