如何测试在运行时使用minitest调用方法?

时间:2017-01-26 15:39:11

标签: ruby-on-rails ruby minitest

如何测试仅在保存后调用Geokit::Geocoders::MultiGeocoder.geocode(generate_address)的事实。我应该以不同方式编写代码吗?

请帮助。

`

https://gist.github.com/bennacer860/b67583afee1bb9255938a3a621a80a54

class Playspace < ActiveRecord::Base
  before_validation :geocode_address, on: [:create, :update]

  def geocode_address
     geo = Geokit::Geocoders::MultiGeocoder.geocode(generate_address)
    # puts geo
    if geo.success
      self.lat = geo.lat
      self.lng = geo.lng
      self.state_code = geo.state_code
      self.country_code = geo.country_code
      self.geolocated_at = Time.now.utc
    else
     errors.add(:address, "Could not Geocode address #{generate_address}") 
    end
 end

  def did_address_change?
    %w( address city state_code country_code postal_code lat lng  ).each do |column|
      return true if (self.send("#{column}_changed?"))
    end
    false
  end
end

1 个答案:

答案 0 :(得分:1)

我建议您使用VCR模拟外部API调用。实际上,您在代码中使用的gem使用VCR作为其own test suite

在测试中设置VCR后,它们可能包含以下内容:

VCR.use_cassette("geocode") do
  playspace.geocode_address
  # Check that one of the columns changed
  assert playspace.did_address_change?
end