Nella mia app ho diverse classi Builder che sono responsabili per prendere i dati ricevuti da una richiesta API esterna e costruire/salvare risorse nel database. Ho a che fare con una grande quantità di dati e ho implementato la gemma Parallel per accelerare l'uso di più processi.RSpec: Come testare metodi che usano Parallel (errore PG :: ConnectionBad)
Tuttavia, ho constatato che qualsiasi test per un metodo che utilizza parallelo viene a mancare con lo stesso errore:
ActiveRecord::StatementInvalid:
PG::ConnectionBad: PQconsumeInput() server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Ecco un esempio del codice in fase di test:
class AirportBuilder < Resource
def build_from_collection
Parallel.each(object_producer, in_processes: 24) do |params|
instance = Airport.find_or_initialize_by(fsid: params[:fs])
build!(instance, params)
end
end
end
I Ho fatto qualche ricerca su questo, ma tutti i risultati di Google hanno a che fare con l'utilizzo di più thread/processi per far funzionare la suite di test più velocemente, il che è un problema diverso.
Qualche idea su come posso testarlo efficacemente senza causare l'errore PG? Mi rendo conto che potrei aver bisogno di mozzare qualcosa, ma non sono abbastanza sicuro di cosa mozzare e avere ancora un test significativo.
Grazie in anticipo a chiunque potrebbe essere in grado di aiutare!