es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

rails minitest stubbing para afirmar un método alternativo

Un método se basa en dos APIs distintas para la geolocalización, siendo la segunda utilizada como respaldo:

def admin_create
  @user_object = User.create!(user_params)
  set_area(@user_object)
end

def set_area(resource)
  do_geocode_lookup(resource)
  if !resource.lon
    do_alternate_geocode_lookup(resource)
  end
end

Encontrar un conjunto de datos que devuelva un conjunto de lon/lat vacío es difícil (y la ortodoxia insta a escribir primero la prueba),
así que… ¿hay alguna forma de simular la prueba para que:

  • do_geocode_lookup devuelva valores de lon/lat vacíos
  • El método do_alternate_geocode_lookup(resource) sea invocado y así probado?
sign_in operator_user
post admin_create_users_url, params: {user: { [...] } }
assert[...]
Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, es posible hacer un stub del método do_geocode_lookup para devolver longitudes y latitudes vacías utilizando el método stub de Minitest. Aquí hay un ejemplo de prueba que demuestra cómo hacer el stub del método:

    def test_set_area_with_empty_geocode_lookup
      # crear un nuevo objeto de usuario
      user = User.new(user_params)
    
      # hacer stub del método do_geocode_lookup para devolver valores de latitud/longitud vacíos
      stub(user).do_geocode_lookup { user.lat = nil; user.lon = nil }
    
      # llamar al método set_area con el objeto de usuario stubbed
      set_area(user)
    
      # asegurar que se invocó el método do_alternate_geocode_lookup
      assert(user.lon.present?)
    end
    

    En esta prueba, creamos un nuevo objeto User y hacemos un stub de su método do_geocode_lookup para devolver valores vacíos de latitud y longitud. Luego llamamos al método set_area con el objeto de usuario stubbed y comprobamos que se haya invocado el método do_alternate_geocode_lookup (asumimos que esto llenaría el atributo lon).

    Ten en cuenta que es posible que necesites ajustar el código de prueba para reflejar los detalles específicos de implementación de los métodos do_geocode_lookup y do_alternate_geocode_lookup en tu aplicación.

Comments are closed.