Hello generous coders,
I''m having difficulty getting a couple of tests to pass.
I have an address model which takes an address and with a callback on save
and update passes the address to google''s
geocoding service. The returned XML is parsed and saved to the address
object:
protected
def geocode_address
key = "mykey"
url =
"http://maps.google.com/maps/geo?q=#{self.address_1.gsub(''
'',
''+'')},+#{self.postcode},+FRANCE&output=xml&key=#{key}"
doc = Hpricot.XML(Iconv.iconv("UTF-8", "ISO-8859-2",
open(URI.escape
(url)).read).to_s)
section = (doc/"Placemark").first
self.lat, self.lng =
(section/"coordinates").text.split('','')
self.town = (section/"LocalityName").text
self.address_1 = (section/"ThoroughfareName").text
end
In my spec for the address model I have as a helper:
def mock_feed
directions =
"q=71+av+Parmentier,+75011,+FRANCE&output=xml&key=mykey"
xml = File.read(RAILS_ROOT + "/spec/fixtures/feeds/75001.xml")
@address.should_receive(:open).exactly(1).times.
with("http://maps.google.com/maps/geo?#{directions}").
and_return(xml)
end
.......................
describe Address, "fetch and geocode" do
include AddressSpecHelper
before do
@address = Address.new
mock_feed
@address.attributes = valid_address_attributes
@address.save
end
it "should populate town and address 1" do
@address.town.should eql("Paris")
@address.address_1.should eql("71, Avenue Parmentier")
end
it "should populate lat and lng as BigDecimals" do
@address.lat.should eql(BigDecimal("2.375258"))
@address.lng.should eql(BigDecimal("48.864315"))
end
end
My two errors:
2)
NoMethodError in ''Address fetch and geocode should populate town and
address
1''
undefined method `read'' for #<String:0x32a0370>
1)
NoMethodError in ''Address fetch and geocode should populate lat and lng
as
BigDecimals''
undefined method `read'' for #<String:0x32b6d50>
These tests passed fine with a previous version of the geocode_address
method:
protected
def geocode_address
key = "mykey"
url = "http://maps.google.com/maps/geo?q=#{self.address_1.gsub(''
'',
''+'')},+#{self.postcode},+FRANCE&output=xml&key=#{key}"
doc = Hpricot.XML(open(url))
self.lat, self.lng =
(doc/"coordinates").text.split('','')
self.town = (doc/"LocalityName").text
self.address_1 = (doc/"ThoroughfareName").text
end
I''m new to rspec and the ideas behind mocks and stubs. I don''t
understand
why rspec is
paying any notice to ''read''. Do I also need to inform the mock
of the ''read''
method? If so, how and why?
Any pointers would be gratefully received.
Many thanks
O
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
http://rubyforge.org/pipermail/rspec-users/attachments/20071201/40018e75/attachment-0001.html