J'ai deux fichiers javascript qui contiennent des cas de test mocha.
//----------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);
});
});
Je les ai placés dans un dossier appelé test
et lorsque j'exécute la commande mocha
, le premier fichier (abc.js) est toujours exécuté avant xyz.js. J'ai pensé que cela pouvait être dû à un ordre alphabétique et j'ai renommé les fichiers en
abc.js => xyz.js
xyz.js => abc.js
mais quand même, le contenu de xyz.js (anciennement abc.js) est exécuté en premier. Comment puis-je modifier l'ordre d'exécution de ces fichiers de test?
Mocha a un --sort
(court -S
) option qui trie les fichiers de test:
$ mocha --help
[...]
-S, --sort sort test files
[...]
Dans le deuxième fichier, exigez le premier:
--- two.js ---
require("./one")
Mocha exécutera les tests dans l'ordre d'exécution des appels describe
.
Je poursuis une solution totalement distincte pour cela.
Mettez tous vos tests dans un dossier nommé test/et créez un fichier tests.js dans le répertoire racine dans l'ordre d'exécution
--- tests.js ---
require('./test/one.js')
require('./test/two.js')
require('./test/three.js')
Et dans les fichiers de tests one.js, two.js et ainsi de suite, écrivez vos tests mocha simples
de cette façon, si vous souhaitez les exécuter dans l'ordre que vous avez défini, exécutez simplement mocha tests.js
Étant donné que mocha trie les fichiers par ordre alphabétique, je préfixe généralement les noms de mes fichiers de test avec des nombres, comme:
0 - util.js
1 - something low level.js
2 - something more interesting.js
etc.
En plus d'être vraiment facile à entretenir (pas de grognement de gorgée ou de n'importe quoi de non-sens, pas de modification de votre package.json ...), il offre l'avantage que:
1 - something.js
mais il n'y a pas d'échecs dans 0 - base.js
alors c'est probablement la faute de la couche couverte par 1 - something.js
Si vous faites de vrais tests unitaires, l'ordre des cours ne devrait pas avoir d'importance, mais je suis rarement en mesure d'aller avec des tests unitaires jusqu'au bout.
Si vous préférez un ordre particulier, vous pouvez lister les fichiers (dans l'ordre) comme arguments de ligne de commande dans mocha
, par exemple:
$ mocha test/test-file-1.js test/test-file-2.js
Pour éviter de trop taper chaque fois que vous voulez l'exécuter, vous pouvez transformer ceci en un script npm
dans votre package.json
:
{
// ...
"scripts": {
"test": "mocha test/test-file-1.js test/test-file-2.js"
}
// ...
}
Exécutez ensuite votre suite à partir de la ligne de commande:
$ npm test
Ou si vous utilisez Gulp, vous pouvez créer une tâche dans votre 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());
});
Exécutez ensuite $ gulp test
.
La façon dont cela a fonctionné pour que mes tests soient exécutés dans un ordre spécifique était de créer un fichier test.js distinct, puis d'ajouter un describe
pour chaque fichier de test mocha que je voulais exécuter.
test.js:
describe('test file 1', function() {
require('./test1.js')
})
describe('test file 2', function() {
require('./test2.js')
})
Ensuite, exécutez simplement mocha test.js