Voglio assicurarmi che nel caso il codice sia in esecuzione in modalità test, che non acceda (accidentalmente) al database sbagliato. Qual è il modo migliore per rilevare se il codice è attualmente in esecuzione in modalità test?Come rilevare se un test di moka è in esecuzione in node.js?
risposta
Come già accennato nel commento, è una cattiva pratica creare il codice in modo consapevole dei test. Non riesco nemmeno a trovare l'argomento menzionato su SO e anche all'esterno. Tuttavia, posso pensare a modi per rilevare il fatto di essere lanciato in prova. Per me mocha non si aggiunge allo scope global
, ma aggiunge global.it
. Così il vostro assegno può essere
var isInTest = typeof global.it === 'function';
vorrei suggerire di essere sicura di non falso-detect per aggiungere controllo per global.sinon
e global.chai
che è più probabile l'utilizzo nelle prove di Node.js.
Ora sta per creare il codice in base ai test. Voglio generare un errore se qualcuno scrive un test che viene eseguito con le impostazioni di distribuzione. L'idea è di proteggere alcune funzioni "pericolose" dall'essere casualmente chiamate da un test non configurato correttamente (come far cadere una tabella sul sistema di produzione). –
Un altro uso improprio ... L'ambiente dello sviluppatore non dovrebbe occuparsi della configurazione di produzione se non si risolvono i problemi. La configurazione dello sviluppatore dovrebbe essere in grado di raggiungere solo l'ambiente locale o almeno lo stage, ma non la produzione. Tuttavia, è tutto commenti e consigli, la risposta è fornita. Non dimenticare di far sapere alla community se è adatta alle tue esigenze o è falsa –
Sono quei casi di "risoluzione dei problemi", gli sviluppatori tendono a dimenticare di essere connessi al database reale ed eseguire un test che potenzialmente distrugge i dati ... –
L'ispezione di process.argv
è un buon approccio nella mia esperienza.
Per esempio se io console.log(process.argv)
durante un test ottengo il seguente:
[
'node',
'/usr/local/bin/gulp',
'test',
'--file',
'getSSAI.test.unit.js',
'--bail',
'--watch'
]
Da cui si può vedere che gulp è in uso. L'utilizzo di yargs rende l'interpretazione molto più semplice.
Sono assolutamente d'accordo con Kirill e in generale che il codice non dovrebbe essere consapevole del fatto che è in fase di test (nel tuo caso forse potresti passare il tuo binding/connessione db tramite un costruttore?), Per cose come la registrazione Posso capire perché potresti voler rilevare questo.
L'unica ragione per cui ho bisogno di verificare se l'applicazione è in esecuzione sotto test è un controllo che non sono connesso a un database di produzione, perché i test cancellano il database. Solo pura paranoia, perché non dovrebbe mai accadere - ma in 30 anni in questo business, ho visto molte cose sbagliate che sono state dichiarate come "che non accadrà mai". –
- 1. Esecuzione condizionale di casi di test moka
- 2. Come posso rilevare se un test NUnit è in esecuzione da all'interno di TeamCity?
- 3. Come rilevare se Vim è in esecuzione in modalità limitata?
- 4. Come rilevare se in esecuzione su localhost
- 5. Come rilevare se uno script Node.js è in esecuzione attraverso una pipe shell?
- 6. Come rilevare se uno script PHP è già in esecuzione?
- 7. OSX: come rilevare se il controllo missione è in esecuzione?
- 8. Come posso rilevare se l'IDE Delphi specifico è in esecuzione?
- 9. Come rilevare se webpack-dev-server è in esecuzione?
- 10. C#: come rilevare se lo screen reader è in esecuzione?
- 11. Esecuzione del test moka ma Errore: ReferenceError: documento non definito
- 12. Rilevare se un'altra istanza dell'applicazione è già in esecuzione
- 13. Come rilevare se sono in esecuzione in mono-servizio?
- 14. Come impostare l'ordine di esecuzione dei casi di test moka in più file
- 15. utilizzando il test di moka con cloud9, eseguire i test di mocha da node.js
- 16. Come rilevare tramite Java se un particolare processo è in esecuzione in Windows?
- 17. mocha in esecuzione con test NPM ma non regolare comando CLI moka
- 18. Rilevare se un'applicazione .NET è in esecuzione in Azure o in un ambiente non Azure
- 19. Come posso rilevare se sono in esecuzione nella console
- 20. Come rilevare che l'audio è attualmente in esecuzione in Linux?
- 21. I test di moka che utilizzano Immutable.js non funzionano quando sono in esecuzione con Karma
- 22. Qualche meccanismo standard per rilevare se un JavaScript è in esecuzione come WebWorker?
- 23. Come può il mio programma rilevare se è in esecuzione su un particolare dominio?
- 24. esecuzione sequenziale in node.js
- 25. Come scoprire se un processo è in esecuzione in C?
- 26. Mantenere node.js in esecuzione
- 27. Rilevare attendibilmente se lo script è in esecuzione in un web worker
- 28. Esecuzione di un test di moka utilizzando Chai e TypeScript dalla riga di comando
- 29. Come posso rilevare se il mio codice è in esecuzione nella console in Rails 3?
- 30. Come rilevare se l'iphone è sincronizzato quando l'app non è in esecuzione
Il modo migliore per evitare che sarebbe in realtà il livello dati fittizio in realtà –
Dove stai eseguendo i test che hanno accesso alle risorse di produzione? Questo dovrebbe essere risolto a livello di rete. I database di produzione dovrebbero accettare solo connessioni da macchine di produzione. –
... potrebbe non essere l'ambiente di produzione. Voglio assicurarmi che i test vengano eseguiti con l'ambiente di test. In caso contrario, vorrei lanciare un errore. –