So testen Sie den Backend-Code von nodejs mit Karma (testacular)

86

Wie richte ich Karma ein, um meine Backend-Unit-Tests (geschrieben mit Mocha) auszuführen? Wenn ich mein Backend-Testskript zum hinzufüge files = [], wird nicht angegeben, dass dies nicht requiredefiniert ist.

Sylvain
quelle
Dieser CAN erfolgen, nimmt Blick auf meinem Projekt: github.com/noamtcohen/Narma
noamtcohen

Antworten:

82

Das tust du nicht. Karma dient nur zum Testen von browserbasiertem Code. Wenn Sie ein Projekt mit Mokka-Tests im Backend und Karma / Mokka im Frontend haben, versuchen Sie, Ihre package.json unter Skripten zu bearbeiten, um den Test auf Folgendes zu setzen:mocha -R spec && karma run karma.con

Wenn npm testtrue zurückgegeben wird, wissen Sie, dass das Festschreiben oder Bereitstellen sicher ist.

Dan Kohn
quelle
Vielen Dank! Ich habe mit Grunt eine Lösung gefunden, die ich bereits in meinem Projekt einrichten wollte. Siehe meine eigene Antwort.
Sylvain
Grundsätzlich verlassen sich dann alle Testläufer für JS auf einen Browser? Das ist nutzlos.
4
Mocha und Jasmine sind nicht auf einen Browser angewiesen. Wenn Sie einen kopflosen Browser ausführen möchten, sollten Sie Phantomjs verwenden.
Dan Kohn
2
Beachten Sie, dass es NICHT schlecht ist, sich beim Testen auf einen Browser zu verlassen. Es gibt verschiedene Arten von Tests und End-to-End-Tests sind gültig, abhängig von Ihren Anforderungen. In einigen Fällen ist es sogar wichtig, die visuelle Regression zu testen (siehe Facebooks Huxley).
Ciro Costa
15

Es scheint, dass es nicht möglich ist (danke @dankohn). Hier ist meine Lösung mit Grunt:

  • Karma: Aktualisieren Sie Ihre Datei karma.conf.js

    • einstellen autoWatch = false;
    • einstellen singleRun = true;
    • set browsers = ['PhantomJS'];(um Inline-Ergebnisse zu haben)
  • Grunzen:

    • npm install grunt-contrib-watch grunt-simple-mocha grunt-karma
    • Konfigurieren Sie die beiden Grunzaufgaben (siehe Grunzdatei unten).

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 (optional): Konfigurieren Sie grunt-watch so, dass es ausgeführt wird, nachdem Sie die zu testenden Spezifikationsdateien oder Dateien geändert haben.

  • Führen Sie alle mit dem gruntBefehl aus.

Sylvain
quelle
3
Sie benötigen also immer noch einen Browser. Der Browser ist nur kopflos. Wie nutzlos, definitiv kein Karma für serverseitige Tests zu verwenden.
5
Hallo, dies verwendet kein Karma für das Backend, dies verwendet Mokka, also keinen Browser. Dies ist nur eine bequeme Möglichkeit, alle Ihre Tests auszuführen, sobald Sie eine Datei speichern.
Sylvain
Obwohl ich Karma für das, was ich tat, nicht wirklich brauchte, führte mich dies auf einen einfachen Weg, um ein Grunz-Setup zu erhalten, mit dem meine Mokka-Tests automatisch ausgeführt werden können. Vielen Dank dafür.
Michael Oryl
Interessanter Ansatz. Aber wie stellen Sie sicher, dass Sails Globals in Ihren Tests richtig erkannt werden?
dmvianna