7 Stimmen

Wie Javascript-Objekte für Unit-Tests ohne Verschmutzung der globalen Namespace freizulegen

Ich habe ein Javascript-Autocomplete-Plugin, das die folgenden Klassen (in coffeescript geschrieben) verwendet: Query, Suggestion, SuggestionCollection und Autocomplete. Jede dieser Klassen hat eine zugehörige Spezifikation in Jasmine geschrieben.

Das Plugin wird innerhalb eines Moduls definiert, z.B.:

(function(){
  // plugin...
}).call(this);

Dies verhindert, dass die Klassen den globalen Namespace verschmutzen, versteckt sie aber auch vor allen Tests (Specs mit Jasmine, oder Unit-Tests mit etwas wie q-unit).

Was ist der beste Weg, um Javascript-Klassen oder Objekte für die Prüfung ohne Verschmutzung der globalen Namespace freizulegen?

Ich werde mit der Lösung antworten, die ich mir ausgedacht habe, aber ich hoffe, dass es eine Standardlösung gibt.

Update: Mein Lösungsversuch

Weil ich ein Neuling mit < 100 xp bin, kann ich meine eigene Frage 8 Stunden lang nicht beantworten. Anstatt zu warten, werde ich einfach hinzufügen, was ich hier getan habe.

Um diese Klassen zu spezifizieren, habe ich ein globales Objekt namens _test dass ich alle darin enthaltenen Klassen zum Testen freigegeben habe. Zum Beispiel, in coffeescript:

class Query
  // ...

class Suggestion
  // ...

// Use the classes

// Expose the classes for testing
window._test = {
  Query: Query
  Suggestion: Suggestion
}

In meinen Spezifikationen kann ich dann die Klasse angeben, die ich teste:

Query = window._test.Query

describe 'Query', ->
  // ...

Dies hat den Vorteil, dass nur die _test Objekt verschmutzt ist, und es ist unwahrscheinlich, dass es mit einer anderen Definition dieses Objekts kollidiert. Allerdings ist es immer noch nicht so sauber, wie ich es mir wünschen würde. Ich hoffe, dass jemand eine bessere Lösung anbieten wird.

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