Stiamo riscontrando problemi nel testare percorsi che modificano i dati nella nostra API. Ad esempio il test che cancella una risorsa fallirà se si esegue la seconda volta.
Anche a causa della logica aziendale non è possibile creare o eliminare alcune risorse tramite l'API (poiché vengono create da altri trigger o come utente non è possibile eliminare dati ma solo archivi).
Inoltre non è possibile creare risorse con un particolare ID, generato dall'API, quindi può essere difficile testare alcune situazioni speciali e non tutti i semi di prova consentono di riutilizzare i dati da altre richieste in un secondo momento. E questo potrebbe anche interrompere i test in esecuzione in modo indipendente in quanto creerà dipendenza tra i test.
Anche ridistribuire l'intera applicazione per un test non è l'ideale, poiché rallenterà l'intero sviluppo della nostra applicazione.
Quindi quale sarebbe l'approccio migliore per ri-seminare il db? Stavo pensando di aggiungere un percorso come:
DELETE /all/changes/to/just/test/user/
Ma questo rompe i principi di responsabilità, che l'API non dovrebbe essere responsabile per i test e che questo dovrebbe essere il lavoro dei test.
Aggiornamento:
L'API / web app ha uno stack complicato basato su più microservizi docker, eventi accodati in rabbitMQ, elasticsearch, mongodb, archiviazione di file esterni, autenticazione di terze parti, docker, kubernets, scalabilità orizzontale, ecc.
Quindi non è solo un DB da prendere in giro, e vorremmo avere l'ambiente di test il più vicino possibile alla produzione. Inoltre mi piacerebbe essere in grado di eseguire ed eseguire il debug dei test dall'env locale, mentre li sto creando. Come dover distribuire di nuovo l'intero stack solo per eseguire e eseguire il debug di un test, si otterrebbe un enorme overkill e si rallenterebbe molto lo sviluppo. Inoltre, come bello da usare, vorremmo utilizzare ATDD .