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 y Minitest stub JSON API para una cadena vacía.

Un stub de Minitest está devolviendo un error:

JSON::ParserError: 767: token inesperado en ''
  app/controllers/concerns/universal_methods.rb:94:in `do_geocode_lookup'

esa línea en universal_methods es el analizador JSON:

results = JSON.parse(response)

La solicitud del stub viene de la sugerencia de Minitest:

stub_request(:get, "https://api.[...]").
  with(headers: { 'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby' }).
  to_return(status: 200, body: '', headers: {})

Si en cambio ejecuto la acción dentro de un bloque:

WebMock.disable!
    [...]
WebMock.enable!

El test se ejecuta correctamente.

¿Qué está mal con el stub sugerido por Minitest?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el stub sugerido por minitest está devolviendo un cuerpo vacío (body: "") en la respuesta, lo cual hace que el analizador JSON (JSON.parse(response)) en el controlador universal_methods lance un JSON::ParserError cuando intenta analizar un token inesperado en la cadena vacía. Desactivar temporalmente WebMock permite que la prueba se ejecute correctamente, probablemente porque permite hacer la solicitud real a la API en lugar de depender del stub. Para solucionar el problema, el cuerpo de respuesta del stub debe contener un JSON válido que pueda ser analizado por el método JSON.parse.

Comments are closed.