2015-01-30 12 views
27

Ho due file di script java che contengono casi di test moka.Come impostare l'ordine di esecuzione dei casi di test moka in più file

//----------abc.js ------------- 

describe("abc file", function(){ 
    it("test 1" , function(){ 
    assert.equal(20 , 20); 
    }); 
}); 

//---------xyz.js-------------- 
describe("xyz file", function(){ 
     it("test 1" , function(){ 
     assert.equal(10 , 10); 
     }); 
    }); 

li ho messi in una cartella denominata test e quando eseguo il comando mocha sempre contenuto del primo file (abc.js) viene eseguito e quindi xyz.js. Ho pensato che questo potrebbe da in ordine lessicale e rinominato i file come

abc.js => xyz.js 
xyz.js => abc.js 

ma ora il contenuto dei xyz.js (in precedenza è stato nominato come abc.js) viene eseguito per primo. Voglio sapere come posso modificare l'ordine di esecuzione di questi file di test.

risposta

15

Mocha ha un'opzione --sort (breve -S) che ordina i file di test:

$ mocha --help 

[...] 
    -S, --sort        sort test files 
[...] 
+11

lo ordina da cosa? – generalchaos

+6

In ordine alfabetico del nome del file. – Louis

+0

Grazie, ho pensato che volessi confermarlo. – generalchaos

36

Nel secondo file, richiedono la prima:

--- two.js --- 
require("./one") 

moka eseguirà i test nell'ordine i describe chiamate eseguite.

+0

Mi piace, molto più pulito. Lo metterà alla prova. Ci sono implicazioni nel farlo in questo modo (scope variabili tra i file di test?) – mekdev

+0

Questa è un'ottima soluzione! –

+2

Per coloro che mi fanno la stessa domanda: "il test richiesto verrà eseguito due volte se è già abbinato alle opzioni di esecuzione della moka?", La risposta è "no". Quindi questa soluzione sembra molto meglio di un ordine alfabetico casuale. – Gnucki

21

Seguo una soluzione totalmente separato per questo.

Mettere tutti i test in un test cartella denominata/e creare un file tests.js nella directory principale in ordine di esecuzione

--- tests.js --- 
require('./test/one.js') 
require('./test/two.js') 
require('./test/three.js') 

E nelle prove file one.js, two.js e così via scrivere i semplici test moka

questo modo se si desidera eseguire loro in ordine è stato definito poi basta eseguire mocha tests.js

+3

Viene visualizzato un errore che indica che l'inclusione non è definita. Questo non ha funzionato per me. –

+0

Dovrebbe essere 'require ('./ test/one.js')', ecc. – AJB

+2

Questo non funziona per me con test asincroni ... – Midas

4

Se si preferisce un ordine particolare, è possibile elencare i file (in ordine) come argomenti da riga di comando a mocha, ad esempio:

$ mocha test/test-file-1.js test/test-file-2.js

Per evitare un sacco di digitare ogni volta che si desidera eseguire, si potrebbe trasformare questo in uno script npm nel vostro package.json:

{ 
    // ... 
    "scripts": { 
    "test": "mocha test/test-file-1.js test/test-file-2.js" 
    } 
    // ... 
} 

Quindi eseguire la vostra suite dalla riga di comando:

$ npm test 

Oppure se stai usando Gulp, potresti creare un'attività in te r gulpfile.js:

var gulp = require('gulp'); 
var mocha = require("gulp-mocha"); 

gulp.task("test", function() { 
    return gulp.src([ 
     "./test/test-file-1.js", 
     "./test/test-file-2.js" 
    ]) 
    .pipe(mocha()); 
}); 

Quindi eseguire $ gulp test.

+1

non lo sono certo questo è vero. ho provato questo passando in 3 file sulla riga di comando, e mocha li ha eseguiti in ordine non sequenziale. – emilebaizel

+0

Prova a leggerli tutti come un unico file, questo non ha funzionato per me. ** Avviso **: Impossibile trovare i file di test corrispondenti a pattern 'mocha test1.js test2.js' " Nessun file di test trovato " – Midas

3

Dal moka di ordinare i file in ordine alfabetico, di solito prefissare i miei nomi file di test con i numeri, come:

  • 0 - util.js
  • 1 - something low level.js
  • 2 - something more interesting.js

ecc

Oltre ad essere davvero facile per mantenere (non grugnito sorso o di quella sciocchezza, non modificando il package.json ...), fornisce il beneficio che:

  • persone che leggono il codice sorgente di avere un'idea della struttura del programma, partendo dalle parti meno interessanti e passando al livello aziendale
  • quando un test ha esito negativo, si hanno alcune indicazioni di causalità (se qualcosa non è riuscito in 1 - something.js ma non ci sono errori in 0 - base.js allora è probabilmente colpa del livello coperto da 1 - something.js

Se stai facendo test unità reale Naturalmente l'ordine non dovrebbe avere importanza, ma raramente riesco ad andare con i test unitari fino in fondo.

Problemi correlati