2017-01-26 20 views
0

Geokit::Geocoders::MultiGeocoder.geocode(generate_address)が保存後にのみ呼び出されたという事実をどうやってテストできますか?自分のコードを別に書くべきですか?minitestでランタイム中にメソッドが呼び出されたことをどのようにテストできますか?

お願いします。

`

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

私はVCRを使用して、外部API呼び出しをあざけることをお勧めします。実際に、コードで使用している宝石は、own test suiteのVCRを使用しています。

あなたのテストでVCRの設定をしたら、彼らはこのようなものが含まれる場合があります。

VCR.use_cassette("geocode") do 
    playspace.geocode_address 
    # Check that one of the columns changed 
    assert playspace.did_address_change? 
end 
関連する問題