17 Stimmen

Private Funktionen in Javascript testen

Ich verwende das Modulmuster in Javascript, um meine öffentliche Schnittstelle von der privaten Implementierung zu trennen. Um meine Arbeit zu vereinfachen, erzeugt mein Code ein Diagramm. Das Diagramm besteht aus mehreren Teilen (Achsen, Beschriftungen, Darstellung, Legende usw.) Mein Code sieht wie folgt aus:

var Graph = function() {
  var private_data;
  function draw_legend() { ... }
  function draw_plot() { ... }
  function helper_func() { ... }
  ...

  return {
    add_data: function(data) {
      private_data = data;
    },
    draw: function() {
      draw_legend()
      draw_plot()
    }
  }
}

Einige Leute plädieren dafür, nur die öffentliche Schnittstelle Ihrer Klassen zu testen, was auch Sinn macht, aber ich würde wirklich gerne einige Tests einbauen, um jede der Komponenten separat zu testen. Wenn ich meine draw_legend()-Funktion versaue, möchte ich, dass dieser Test fehlschlägt und nicht ein Test für die öffentliche draw()-Funktion. Bin ich hier auf dem falschen Weg?

Ich könnte jede der Komponenten in verschiedene Klassen aufteilen, z. B. eine Klasse Legende erstellen. Aber es scheint dumm, eine Klasse für das, was manchmal nur 5-10 Zeilen Code ist, zu erstellen, und es wäre hässlicher, weil ich in einem Bündel von privaten Zustand übergeben müssen würde. Und ich wäre nicht in der Lage, meine Hilfsfunktionen zu testen. Sollte ich das trotzdem tun? Sollte ich es auf sich beruhen lassen und nur die öffentliche draw() testen? Oder gibt es eine andere Lösung?

0voto

Es gibt nur eine richtige Option: Unterschiedliche Builds für Test und Produktion

1) nur Teile der Entwicklung markieren

/* test-code */
api._foo = foo
/* end-test-code */

2) sie später ausziehen... ;)

grunt.registerTask("deploy", 
  [
    "concat",
    "strip-code",
    ...

@philwalton hat schöne Artikel geschrieben:

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X