On 2 Mar 2010, at 21:05, Adam R wrote:


An update for this issue. This script works, but only if I explicitly define the array that I'm iterating over (][countryname, url]].each do, rather than
@countries.each do).

Can someone help me understand why my array here (@countries) is not
recognized? I tried to instantiate it as a global variable ($countries) and it still was not recognized. If I explicitly describe an array in place of
the variable, the script works.

Is it an issue with my organization format, or something else?

global_page_spec.rb
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..') if $0 == __FILE__
require 'helpers/example_helper'

describe "The country page for" do
 include ExHelper

 before(:all) do
   setup
   collect_global_countries
 end

 @countries.each do |name, link|
   describe name do
   it "should contain the word #{name} in the title" do
     @browser.goto link
     @browser.div(:id, /content-content/).text.should include(name)
   end #it
   end #desc
 end #countries

 after(:all) do
   teardown
 end #after
end #spec

example_helper.rb
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..') if $0 == __FILE__
require 'helpers/global_helper'

module ExHelper
 include GlobalHelper

 def setup
   @browser = Watir::Browser.new
   @browser.add_checker lambda {|b| b.text.should_not include('The
requested page could not be found.')}
 end # setup

 def collect_global_countries
   @countries = Array.new
   @countries.should be_empty

   @browser.goto "http://www.#{$env}.com/global";
   @browser.table(:class, /global-list/).links.each do |link|
     @countries << [link.text, link.href]
   end #links

   @countries.should_not be_empty

 def teardown
   @browser.close
 end # teardown
end #module
--
View this message in context: 
http://old.nabble.com/RSpec-and-Watir%2C-easy-script-structure-question-tp27758607p27761159.html
Sent from the rspec-users mailing list archive at Nabble.com.

_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

Briefly, think of two passes over this file: the first 'parse' pass, and the second 'execution' pass. The #before and #it blocks run during the 'execution' pass, but the code in the #describe blocks runs in the initial 'parse' pass. Because @countries is not created until the before blocks run, there's no way for the 'parse' pass to know what value it has.

That's the basic essence of your issue. I'd recommend paring this back to a much simpler example, getting that working, then building up from there.

I'm also not sure why you're using the SUT to generate the tests, but that's for another thread...


cheers,
Matt

http://mattwynne.net
+447974 430184

_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to