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.