Mam wtyczkę autouzupełniania javascript, która używa następujących klas (napisanych w coffeescript): Zapytanie, sugestia, kolekcja sugestii i autouzupełnianie. Każda z tych klas ma przypisaną specyfikację napisaną w Jasmine.Jak eksponować obiekty javascript do testowania jednostkowego bez zanieczyszczania globalnej przestrzeni nazw
Wtyczka jest zdefiniowana w module, np:
(function(){
// plugin...
}).call(this);
Zapobiega to zajęcia z zanieczyszczających globalnej przestrzeni nazw, ale także ukrywa je od wszelkich prób (specyfikacje z jaśminu lub jednostek testy z czymś takim q-jednostka).
Jaki jest najlepszy sposób na ujawnienie klas javascript lub obiektów do testowania bez zanieczyszczania globalnej przestrzeni nazw?
Będę odpowiedzieć na rozwiązanie, które wymyśliłem, ale mam nadzieję, że jest coś bardziej standardowego.
Aktualizacja: Moja próba Rozwiązanie
Bo jestem NEWB z < 100 XP, nie mogę odpowiedzieć na moje własne pytanie do 8 godzin. Zamiast czekać, dodam tylko to, co tu zrobiłem.
W celu wyspecyfikowania tych klas wymyśliłem obiekt globalny o nazwie _test
, w którym odsłoniłem wszystkie klasy w ramach testów. Na przykład, w coffeescript:
class Query
// ...
class Suggestion
// ...
// Use the classes
// Expose the classes for testing
window._test = {
Query: Query
Suggestion: Suggestion
}
wewnątrz mojego specyfikacji, a następnie, nie mogę ujawnić klasę jestem testowania:
Query = window._test.Query
describe 'Query', ->
// ...
Ma to tę zaletę, że tylko przedmiotem _test
jest zanieczyszczone, a to jest mało prawdopodobne, że zderzy się z inną definicją tego obiektu. Wciąż nie jest tak czysty, jak bym chciał. Mam nadzieję, że ktoś dostarczy lepsze rozwiązanie.
Może odsłonić trochę zmienną wewnętrzną, tylko? Przykład: 'window.exposedVars = this' (wewnętrzna strona zamknięcia)? –
Właśnie dodałem proponowane rozwiązanie kilka sekund po tym, jak to opublikowałeś. Czy to jest zgodne z tym, co sugerujesz? – Mitch
W jaki sposób Twoja wtyczka jest przydatna i nadal nie dodaje niczego do globalnej przestrzeni nazw? Jestem naprawdę ciekawy, może robisz coś, czego nie jestem świadomy. O ile mogę powiedzieć, zawsze musi istnieć co najmniej jeden obiekt, który dostaje się do globalnej przestrzeni nazw. –