Comment tester le code backend de nodejs avec Karma (testacular)

87

Comment configurer Karma pour exécuter mes tests unitaires backend (écrits avec Mocha)? Si j'ajoute mon script de test backend au files = [], il échoue en indiquant qu'il requiren'est pas défini.

Sylvain
la source
Cela PEUT être fait, jetez un œil à mon projet: github.com/noamtcohen/Narma
noamtcohen

Réponses:

83

Vous ne le faites pas. Karma sert uniquement à tester le code basé sur un navigateur. Si vous avez un projet avec des tests mocha sur le backend et karma / mocha sur le front-end, essayez de modifier votre package.json sous scripts pour définir test sur:mocha -R spec && karma run karma.con

Ensuite, si npm testretourne true, vous saurez que vous pouvez valider ou déployer en toute sécurité.

Dan Kohn
la source
Merci! J'ai trouvé une solution en utilisant Grunt que je prévoyais déjà de mettre en place dans mon projet. Voir ma propre réponse.
Sylvain
Fondamentalement, tous les testeurs pour JS s'appuient sur un navigateur alors? Cela ne sert à rien.
4
Mocha et Jasmine ne dépendent pas d'un navigateur, et lorsque vous souhaitez exécuter un navigateur sans tête, pensez à utiliser phantomjs.
Dan Kohn
2
Notez que compter sur un navigateur pour tester n'est PAS quelque chose de mal. Il existe différents types de tests et les tests de bout en bout sont valides, en fonction de vos besoins. Même le test de la régression visuelle (voir le huxley de Facebook) est important dans certains cas.
Ciro Costa
15

Il semble que cela ne puisse pas être fait (merci @dankohn). Voici ma solution en utilisant Grunt:

  • Karma: mettez à jour votre fichier karma.conf.js

    • ensemble autoWatch = false;
    • ensemble singleRun = true;
    • set browsers = ['PhantomJS'];(pour avoir des résultats en ligne)
  • Grognement:

    • npm install grunt-contrib-watch grunt-simple-mocha grunt-karma
    • configurer les deux tâches grunt (voir le fichier grunt ci-dessous)

Gruntfile.js:

module.exports = function (grunt) {
  grunt.loadNpmTasks('grunt-simple-mocha');
  grunt.loadNpmTasks('grunt-karma');

  grunt.initConfig({
    simplemocha: {
      backend: {
        src: 'test/server-tests.js'
      }
    },
    karma: {
      unit: {
        configFile: 'karma.conf.js'
      }
    }
  });

  // Default task.
  grunt.registerTask('default', ['simplemocha', 'karma']);
};
  • Grunt (facultatif): configurez grunt-watch pour qu'il s'exécute après la modification des fichiers de spécifications ou des fichiers à tester.

  • exécutez tout en utilisant la gruntcommande.

Sylvain
la source
3
Vous avez donc toujours besoin d'un navigateur, c'est juste que le navigateur est sans tête. Comment inutile, certainement pas utiliser le karma pour les tests côté serveur.
5
Salut, cela n'utilise pas le karma pour le backend, cela utilise le moka, donc pas de navigateur. C'est juste un moyen pratique d'exécuter tous vos tests dès que vous enregistrez un fichier.
Sylvain
Bien que je n'avais pas vraiment besoin de Karma pour ce que je faisais, cela m'a conduit sur un chemin facile pour obtenir une configuration grognement pour exécuter mes tests moka automatiquement, alors merci pour cela.
Michael Oryl
Approche intéressante. Mais comment vous assurez-vous que les globaux Sails sont correctement reconnus dans vos tests?
dmvianna