Tengo un complemento de autocompletar de JavaScript que utiliza las siguientes clases (escritas en coffeescript): Consulta, Sugerencia, SugerenciaColección y Autocompletar. Cada una de estas clases tiene una especificación asociada escrita en Jasmine.Cómo exponer los objetos javascript para pruebas de unidades sin contaminar el espacio de nombres global
El plugin se define dentro de un módulo, por ejemplo:
(function(){
// plugin...
}).call(this);
Esto evita que las clases de contaminar el espacio de nombres global, sino que también les esconde de las pruebas (especificaciones con jazmín, o unidad de pruebas con algo así como q-unidad).
¿Cuál es la mejor manera de exponer las clases de JavaScript u objetos para probar sin contaminar el espacio de nombres global?
Voy a responder con la solución que se me ocurrió, pero espero que haya algo más estándar.
Actualización: Mi intento de solución
Porque soy un newb con < 100 XP, no puede responder a mi propia pregunta durante 8 horas. En lugar de esperar, solo agregaré lo que hice aquí.
Para especificar estas clases, inventé un objeto global llamado _test
que expuse todas las clases dentro para probar. Por ejemplo, en CoffeeScript:
class Query
// ...
class Suggestion
// ...
// Use the classes
// Expose the classes for testing
window._test = {
Query: Query
Suggestion: Suggestion
}
Dentro de las especificaciones de mi, entonces, puedo revelar la clase Estoy prueba:
Query = window._test.Query
describe 'Query', ->
// ...
Esto tiene la ventaja de que sólo el objeto _test
está contaminado, y se es poco probable que colisione con otra definición de este objeto. Sin embargo, todavía no está tan limpio como me gustaría. Espero que alguien proporcione una mejor solución.
exponga Tal vez alguna variable interna, solamente? Ejemplo: 'window.exposedVars = this' (inner of closure)? –
Acabo de agregar mi solución propuesta unos segundos después de publicar esto. ¿Es lo que estabas sugiriendo? – Mitch
¿Cómo es útil su complemento y aún no agrega nada al espacio de nombre global? Tengo curiosidad genuina, quizás estás haciendo algo de lo que no estoy enterado. Por lo que puedo decir, siempre tiene que haber al menos un objeto que salga al espacio de nombres global. –