web-dev-qa-db-fra.com

Comment exécuter les tests mocha et mocha-phantomjs à partir d'une seule commande "npm test" dans node.js?

J'ai quelques paquets de nœuds qui fonctionnent dans l'environnement node.js et également dans le navigateur. Maintenant, j'ai deux tests séparés (pour chaque environnement). Quelle est la meilleure façon d'exécuter ces tests avec juste npm test commande? Je veux également ajouter ces packages à travis.

J'utilise mocha et mocha-phantomjs.

commande de test de nœud

node ./node_modules/mocha/bin/mocha ./test/node/index.js --reporter spec

commande de test du navigateur

node ./node_modules/mocha-phantomjs/bin/mocha-phantomjs ./test/browser/index.html

Ce que j'ai essayé:

  1. Ajoutez ces commandes dans npm test script séparé par un point-virgule
    • Problème: Lorsqu'il y a une erreur dans le premier script mais aucune erreur dans le deuxième script, la commande s'est terminée avec 0 et la construction de travis est passée.
  2. Laisser la commande de noeud tester dans npm test script et créer un script personnalisé pour les tests du navigateur. Ajoutez ensuite ces deux commandes (npm test et npm run-script test-browser) dans travis.yml en tant que tableau.
    • Problème: Les utilisateurs doivent exécuter manuellement deux scripts de test indépendants.
  3. Laisser la commande de noeud tester dans npm test script et ajouter des tests de navigateur à npm posttest commande. Travis.yml n'aura alors qu'un seul script et les utilisateurs devront également exécuter un script (tout le monde est content).
    • Problème: Ça ne me semble pas juste, donc je voulais savoir s'il y avait une meilleure façon.
57
David Kudera

J'aime ce qui suit:

  "scripts": {
    "test": "npm run test-node && npm run test-browser",
    "test-node": "mocha -R spec ./test/node/index.js",
    "test-browser": "mocha-phantomjs ./test/browser/index.html"}

Le && n'exécute la seconde que si la première passe, et vous pouvez exécuter l'une ou l'autre séparément si vous le souhaitez. Notez que npm utilise toujours mocha relatif (à l'intérieur de node_modules), pas le global, donc il n'y a aucun mal à simplement appeler mocha et mocha-phantomjs directement. Vous pouvez être encore plus efficace avec le -b option de caution, qui s'arrêtera dès qu'il rencontrera une erreur.

77
Dan Kohn

Entré ici à la recherche d'informations sur la configuration de npm avec karma. @ réponse de dankohn peut être adapté ainsi:

"scripts": {
  "test": "npm run test-node && npm run test-browser",
  "test-node": "karma run",
  "test-browser": "karma start --single-run"
}

J'espère que cela aide quelqu'un d'autre.

4
Drew Noakes

Vous pouvez aussi utiliser npm-run-all paquet:

npm install npm-run-all --save-dev

"scripts": {
  "test": "npm-run-all test-mocha test-mocha-phantomjs",
  "test-mocha": "mocha ./test/node/index.js --reporter spec",
  "test-mocha-phantomjs": "mocha-phantomjs ./test/browser/index.html"
}

Il exécutera des copies locales de mocha et mocha-phantomjs. Twitter bootstrap utilise cette bibliothèque pour le développement.

0
Dmitry Yaremenko