Come specificare la directory di test per mocha?


219

Mocha tenta di trovare i file di prova testper impostazione predefinita, come posso specificare un'altra directory , ad es. server-test?


Pur non rispondendo al 100% alla tua domanda, dai un'occhiata a jaketrent.com/post/run-single-mocha-test - Sono venuto qui alla ricerca di come eseguire una suite di test specifica e questo dimostra che puoi usare .onlye .skipgestire 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.
Dave Sag,

Risposte:


141

Modifica: questa opzione è obsoleta: https://mochajs.org/#mochaopts


Se vuoi farlo eseguendo ancora solo mochadalla riga di comando, ma vuoi eseguire i test in una cartella ./server-testsinvece di ./test, crea un file ./test/mocha.optscon 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/


12
Questa è l'opzione con il minor attrito e dovrebbe essere la risposta accettata IMHO
Nick Tomlin,

sto usando una delle piastre della caldaia e questa alla riga seguente, potrebbe essere a causa delle finestre, puoi controllare una volta.nodo ./node_modules/mocha/bin/mocha $ (trova api -name '* -test.js') --compilers js: babel-core / register
kobe,

1
un gioiello, gioca anche bene con le configurazioni di debug di Webstorm IDE mocha, basta selezionare "pattern file" e lasciare vuoto l'input, e utilizzerà mocha.opts
danday74

3
Questa è sicuramente la risposta migliore. Molto probabilmente varrebbe la pena aggiungere nella tua risposta anche che il mocha.optsfile può essere posizionato dove vuoi, e quindi eseguire semplicemente mochaspecificando il percorso del suo file di configurazione, ad esempio:mocha --opts ./mocha.opts
quirimmo,

1
potresti anche semplicemente inserire --recursive nella riga di comando di mocha, utile se definisci lo script di test nel tuo package.json
unludo

282

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.


1
Questo non funziona per me. Se desidero farlo in questo modo, devo farlomocha test/server-test
jonnie,

22
Il problema delle doppie virgolette mi ha fatto invecchiare! Grazie per avermi salvato la sanità mentale. Grida a tutti coloro che leggono questo per prestare particolare attenzione a quelle doppie virgolette.
ctrlplusb,

11
Nel mio caso, stavo usando 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.
Stoutie

1
o semplicemente usa --recursivecome spiego di seguito
Jeff Dickey,

4
Questa dovrebbe essere la risposta! Le doppie virgolette mi salvano
Minh Thai

81

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')

29
o semplicemente usa --recursivecome spiego di seguito
Jeff Dickey,

5
Quindi in altre parole mochanon ha alcuna opzione per impostare la struttura di directory desiderata in config?
Verde,

utente client $ mocha $ (trova test -name '* .js') -bash: mocha: comando non trovato; Ottenere questo errore.
lft93ryt,

1
Questo è troppo complicato e fuorviante. Preferisci le opzioni moka piuttosto che usare un comando OS.
Michael Bushe,

il tuo post non risponde alla domanda
ekkis,

30

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 .


Questo è il modo più accurato per farlo immagino.
Artur

29

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

22

Se in node.js , alcune nuove configurazioni a partire da Mocha v6 :

Opzione 1: creare .mocharc.jsonnella directory principale del progetto:

{
  "spec": "path/to/test/files"
}

Opzione 2: aggiungere la mochaproprietà nel progetto package.json:

{
  ...

  "mocha": {
    "spec": "path/to/test/files"
  }
}

Altre opzioni sono qui .


20

Esegui tutti i file test_directoryincludendo le sottodirectory corrispondentitest.js

find ./parent_test_directory -name '*test.js' | xargs mocha -R spec

o utilizzare l' --recursiveinterruttore

mocha --recursive test_directory/

11

Ho avuto questo problema proprio ora e l'ho risolto rimuovendo l' --recursiveopzione (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/


9

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


3

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à.


11
Ad oggi, è possibile utilizzare l' --recursiveopzione come la seguente:mocha --recursive "some_dir"
superjos

3
L'uso 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)
Alex 75

3

Se stai usando nodejs, nel tuo package.jsonsottoscripts

  1. Per global (-g)installazioni: "test": "mocha server-test"o "test": "mocha server-test/**/*.js"per documenti secondari
  2. Per projectinstallazioni: "test": "node_modules/mocha/bin/mocha server-test"o "test": "node_modules/mocha/bin/mocha server-test/**/*.js"per documenti secondari

Quindi esegui i tuoi test normalmente come npm test


Sto scoprendo che npm run mocha "./test/*.spec.js!(~)"ignora l'argomento glob, ma node_modules/.bin/mocha "./test/*.spec.js!(~)"non lo fa.
Ironchicken

@ironchicken per passare argomenti da "npm run" usa - come innpm run mocha -- yourArgs
Pedro A

3

Come menzionato da @superjos nei commenti usare

mocha --recursive "some_dir"


2

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.


2

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.