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?
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 controladoruniversal_methods
lance unJSON::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étodoJSON.parse
.