Jak przetestować kod backendu nodejs za pomocą Karmy (testowy)

87

Jak skonfigurować Karmę, aby uruchamiała testy jednostkowe zaplecza (napisane za pomocą Mocha)? Jeśli dodam mój skrypt testowy zaplecza do pliku files = [], nie powiedzie się, że requirejest niezdefiniowany.

Sylvain
źródło
To MOŻE być zrobione, wziąć spojrzenie w moim projekcie: github.com/noamtcohen/Narma
noamtcohen

Odpowiedzi:

83

Ty nie. Karma służy tylko do testowania kodu opartego na przeglądarce. Jeśli masz projekt z testami mokka na zapleczu i karmą / mokką na froncie, spróbuj edytować plik package.json w skryptach, aby ustawić test na:mocha -R spec && karma run karma.con

Następnie, jeśli npm testzwróci true, będziesz wiedział, że zatwierdzenie lub wdrożenie jest bezpieczne.

Dan Kohn
źródło
Dzięki! Znalazłem rozwiązanie za pomocą Grunt, które już planowałem skonfigurować w swoim projekcie. Zobacz moją własną odpowiedź.
Sylvain
Zasadniczo więc wszystkie programy uruchamiające testy dla JS polegają na przeglądarce? To bezużyteczne.
4
Mocha i Jasmine nie polegają na przeglądarce, a jeśli chcesz uruchomić na przeglądarce bezgłowej, rozważ użycie phantomjs.
Dan Kohn,
2
Zauważ, że poleganie na przeglądarce do testowania NIE jest czymś złym. Istnieją różne rodzaje testów, a testy od końca do końca są ważne, w zależności od Twoich potrzeb. Nawet testowanie regresji wizualnej (patrz huxley na Facebooku) jest ważne w niektórych przypadkach.
Ciro Costa
15

Wygląda na to, że nie można tego zrobić (dzięki @dankohn). Oto moje rozwiązanie wykorzystujące Grunt:

  • Karma: zaktualizuj swój plik karma.conf.js

    • zestaw autoWatch = false;
    • zestaw singleRun = true;
    • zestaw browsers = ['PhantomJS'];(aby mieć wyniki w tekście)
  • Chrząknięcie:

    • npm install grunt-contrib-watch grunt-simple-mocha grunt-karma
    • skonfiguruj dwa zadania gruntowne (zobacz plik grunt poniżej)

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 (opcjonalnie): skonfiguruj grunt-watch do uruchamiania po zmianie plików specyfikacji lub plików do przetestowania.

  • uruchom wszystko za pomocą gruntpolecenia.

Sylvain
źródło
3
Więc nadal potrzebujesz przeglądarki, po prostu przeglądarka jest bezgłowa. Jakże bezużyteczne, zdecydowanie nie wykorzystujące karmy do testowania po stronie serwera.
5
Cześć, to nie używa karmy do backendu, to używa mokki, więc nie ma przeglądarki. Jest to po prostu wygodny sposób przeprowadzania wszystkich testów zaraz po zapisaniu pliku.
Sylvain,
Chociaż tak naprawdę nie potrzebowałem Karmy do tego, co robiłem, poprowadziło mnie to łatwą ścieżkę do skonfigurowania gruntów do automatycznego uruchamiania testów mokki, więc dziękuję za to.
Michael Oryl,
Ciekawe podejście. Ale jak upewnić się, że Sails globals są właściwie rozpoznawane w twoich testach?
dmvianna