Estoy usando TestUnit y me gustaría determinar si se llama a una función. Tengo un método en una clase Persona llamada, la cual di a llamarse 'before_update':Pruebe si se llama a una función en una prueba de la unidad Ruby on Rails
def geocode_if_location_info_changed
if location_info_changed?
spawn do
res = geocode
end
end
end
entonces tengo una prueba de unidad:
def test_geocode_if_location_info_changed
p = create_test_person
p.address = "11974 Thurloe Drive"
p.city = "Baltimore"
p.region = Region.find_by_name("Maryland")
p.zip_code = "21093"
lat1 = p.lat
lng1 = p.lng
# this should invoke the active record hook
# after_update :geocode_if_location_info_changed
p.save
lat2 = p.lat
lng2 = p.lng
assert_not_nil lat2
assert_not_nil lng2
assert lat1 != lat2
assert lng1 != lng2
p.address = "4533 Falls Road"
p.city = "Baltimore"
p.region = Region.find_by_name("Maryland")
p.zip_code = "21209"
# this should invoke the active record hook
# after_update :geocode_if_location_info_changed
p.save
lat3 = p.lat
lng3 = p.lng
assert_not_nil lat3
assert_not_nil lng3
assert lat2 != lat3
assert lng2 != lng3
end
¿Cómo puedo estar seguro de que el método de "codificación geográfica" fue llamado? Esto es más importante para el caso en que deseo asegurarme de que no se llame si la información de ubicación no ha cambiado.
Gracias!
Estoy de acuerdo con esta respuesta, aunque creo que quiere 'p.expects (: geocode_if_location_info_changed) .times (1)'. Estoy bien con el uso de mocha aquí. Un filtro anterior parece bastante cercano a un colaborador, en mi opinión. –
Estaba tratando de probar la lógica del filtro anterior, y * spawn * es lo primero dentro del if. Si solo prueba la llamada del filtro anterior, solo está probando que el "before_filter" estaba presente y que los rieles están funcionando ... eso está bien, pero parece que estamos tratando de entender la lógica dentro del filtro. – ndp
Buen punto: puedo ver ese ángulo. –