Risposte:
Modifica: questa opzione è obsoleta: https://mochajs.org/#mochaopts
Se vuoi farlo eseguendo ancora solo mocha
dalla riga di comando, ma vuoi eseguire i test in una cartella ./server-tests
invece di ./test
, crea un file ./test/mocha.opts
con solo questo nel file:
server-tests
Se vuoi eseguire tutto in quella cartella e sottodirectory, inseriscilo test/mocha.opts
server-tests
--recursive
mocha.opts
sono gli argomenti passati tramite la riga di comando, quindi fare in modo che la prima riga sia solo la directory in cui si desidera modificare i test reindirizzerà ./test/
mocha.opts
file può essere posizionato dove vuoi, e quindi eseguire semplicemente mocha
specificando il percorso del suo file di configurazione, ad esempio:mocha --opts ./mocha.opts
Usa questo:
mocha server-test
O se hai delle sottodirectory usa questo:
mocha "server-test/**/*.js"
Nota l'uso di virgolette doppie. Se li ometti, potresti non essere in grado di eseguire test nelle sottodirectory.
mocha test/server-test
mocha ./**/*.test.js
(in modo da poter raggruppare il file di test con il file del modulo). Il modello ha smesso di funzionare per me quando ho aggiunto un file di test a un livello diverso nella gerarchia dei file rispetto al resto dei test, e avrei trovato solo un file palla dispari e non la dozzina di altri che vivevano allo stesso livello nella gerarchia . Il wrapping tra virgolette l'ha risolto.
--recursive
come spiego di seguito
Ecco un modo, se nella cartella di test sono presenti sottocartelle, ad es
/test
/test/server-test
/test/other-test
Quindi in Linux puoi usare il comando find per elencare tutti i file * .js in modo ricorsivo e passarlo a mocha:
mocha $(find test -name '*.js')
--recursive
come spiego di seguito
mocha
non ha alcuna opzione per impostare la struttura di directory desiderata in config?
Il modo migliore per farlo è quello di aggiungere uno script npm "test" in package.json che chiama moka con gli argomenti giusti. In questo modo package.json descrive anche la struttura del test. Evita anche tutti questi problemi multipiattaforma nelle altre risposte (virgolette doppie vs singole, "trova", ecc.)
Per fare in modo che mocha esegua tutti i file js nella directory "test":
"scripts": {
"start": "node ./bin/www", -- not required for tests, just here for context
"test": "mocha test/**/*.js"
},
Quindi per eseguire solo i test del fumo chiama:
npm test
Puoi standardizzare l'esecuzione di tutti i test in tutti i progetti in questo modo, quindi quando un nuovo sviluppatore inizia sul tuo progetto o su un altro, sa che "npm test" eseguirà i test. C'è una buona precedenza storica per questo (Maven, ad esempio, anche la maggior parte dei progetti "realizzano" la vecchia scuola). Aiuta sicuramente CI quando tutti i progetti hanno lo stesso comando di test.
Allo stesso modo, potresti avere un sottoinsieme di test "fumi" più veloci che potresti voler eseguire moka:
"scripts": {
"test": "mocha test/**/*.js"
"smoketest": "mocha smoketest/**/*.js"
},
Quindi per eseguire solo i test del fumo chiama:
npm smoketest
Un altro modello comune è posizionare i test nella stessa directory dell'origine testata, ma chiamare i file di test * .spec.js. Ad esempio: src / foo / foo.js è testato da src / foo / foo.spec.js.
Per eseguire tutti i test denominati * .spec.js per convenzione:
"scripts": {
"test": "mocha **/*.spec.js"
},
Quindi per eseguire tutti i test chiama:
npm test
Vedi lo schema qui? Buona. :) La coerenza sconfigge mura .
Non usare l'opzione -g o --grep, quel modello opera sul nome del test al suo interno (), non sul filesystem. La presente documentazione è fuorviante e / o totalmente errata al riguardo. Per limitare l'intero comando a una parte del filesystem, è possibile passare un modello come ultimo argomento (non è un flag).
Ad esempio, questo comando imposterà il reporter su spec ma testerà immediatamente i file js solo all'interno della directory server-test:
mocha --reporter spec server-test/*.js
Questo comando farà lo stesso come sopra, inoltre eseguirà solo i casi di test in cui la stringa / definizione it () di un test inizia con "Fnord:":
mocha --reporter spec --grep "Fnord:" server-test/*.js
Se in node.js , alcune nuove configurazioni a partire da Mocha v6 :
Opzione 1: creare .mocharc.json
nella directory principale del progetto:
{
"spec": "path/to/test/files"
}
Opzione 2: aggiungere la mocha
proprietà nel progetto package.json
:
{
...
"mocha": {
"spec": "path/to/test/files"
}
}
Altre opzioni sono qui .
Esegui tutti i file test_directory
includendo le sottodirectory corrispondentitest.js
find ./parent_test_directory -name '*test.js' | xargs mocha -R spec
o utilizzare l' --recursive
interruttore
mocha --recursive test_directory/
Ho avuto questo problema proprio ora e l'ho risolto rimuovendo l' --recursive
opzione (che avevo impostato) e usando la stessa struttura suggerita sopra:
mochify "test/unit/**/*.js"
Questo ha eseguito tutti i test in tutte le directory sotto /test/unit/
di me mentre ignora le altre directory all'interno/test/
Ora un giorno (anno 2020) puoi gestirlo usando il file di configurazione mocha :
Passaggio 1: creare il file .mocharc.js nella posizione principale dell'applicazione
Passaggio 2: aggiungi il codice seguente nel file di configurazione di mocha:
'use strict';
module.exports = {
spec: 'src/app/**/*.test.js'
};
Per ulteriori opzioni nel file di configurazione, consultare questo collegamento: https://github.com/mochajs/mocha/blob/master/example/config/.mocharc.js
Sono su Windows 7 utilizzando node.js v0.10.0 e mocha v1.8.2 e npm v1.2.14. Stavo solo cercando di convincere la moka a usare il test / unità di percorso per trovare i miei test, dopo aver trascorso troppo tempo e aver provato diverse cose che sono atterrato,
L'uso dell'opzione "test / unit / *. Js" non funziona su Windows. Per buoni motivi, la shell di Windows non espande i caratteri jolly come unixen.
Tuttavia, l'utilizzo di "test / unità" funziona, senza il modello di file. per esempio. "mocha test / unit" esegue tutti i file trovati nella cartella test / unit.
In questo modo viene eseguito solo un file di cartella come test ma è possibile passare più nomi di directory come parametri.
Inoltre per eseguire un singolo file di prova è possibile specificare il percorso completo e il nome file. per esempio. "test moca / unità / mytest1.js"
In realtà ho installato in package.json per npm "script": {"test": "mocha test / unit"},
In modo che 'npm test' esegua i test delle mie unità.
--recursive
opzione come la seguente:mocha --recursive "some_dir"
node_modules\.bin\mocha "test\unit\*.js"
funziona su Windows. node_modules\.bin\mocha "**\*.js"
Funziona anche (il mio caso reale). Ma sto cercando un modo per escludere la directory node_modules . (Uso anche gulpfile.js ma a volte devo avviare il test direttamente con la moka)
Se stai usando nodejs
, nel tuo package.json
sottoscripts
global (-g)
installazioni: "test": "mocha server-test"
o "test": "mocha server-test/**/*.js"
per documenti secondariproject
installazioni: "test": "node_modules/mocha/bin/mocha server-test"
o "test": "node_modules/mocha/bin/mocha server-test/**/*.js"
per documenti secondariQuindi esegui i tuoi test normalmente come npm test
npm run mocha "./test/*.spec.js!(~)"
ignora l'argomento glob, ma node_modules/.bin/mocha "./test/*.spec.js!(~)"
non lo fa.
npm run mocha -- yourArgs
Questo non sembra essere un supporto "facile" per cambiare la directory di test.
Tuttavia, forse dovresti dare un'occhiata a questo problema , relativo alla tua domanda.
Come suggerito da @ jeff-dickey, nella radice del progetto, crea una cartella chiamata test
. In quella cartella, crea un file chiamato mocha.opts
. Ora dove provo a migliorare la risposta di Jeff, quello che ha funzionato per me è stato invece di specificare il nome di una sola cartella di test, ho specificato uno schema per trovare tutti i test da eseguire nel mio progetto aggiungendo questa riga:
*/tests/*.js --recursive
nel mocha.opts
Se invece vuoi specificare le cartelle esatte in cui cercare i test, ho fatto qualcosa del genere:
shared/tests/*.js --recursive
server/tests/graph/*.js --recursive
Spero che questo aiuti chiunque abbia bisogno di più di quello che forniscono le altre risposte
.only
e.skip
gestire quali test stanno correndo. Importante durante lo sviluppo di una funzionalità specifica quando non si desidera attendere l'esecuzione continua dell'intera suite di test.