2012-06-02 12 views
20

Como parte de mis pruebas unitarias (usando QUnit) para un proyecto de red troncal, pruebo algunas funciones de manipulación de colecciones que devuelven matrices de modelos de red troncal.¿Hay alguna manera de probar si un objeto "es un" Backbone.Model en mi unidad de pruebas?

¿Hay alguna manera de probar directamente (por motivos de cordura) si los objetos en mi matriz extienden Backbone.Model o debería hacer una verificación de tipo de pato (y si es así, cómo y en qué atributo único, por ejemplo)?

Dado que no existe una construcción de "Clase" real en javascript, typeof obviamente no funcionará aquí.

pude ver que era útil en otras pruebas en el camino de mis colecciones, o para comprobar que las cosas son instancias de mis clases troncales específicas, etc.

Respuesta

33

Cómo sobre el uso instanceof:

console.log(yourObject instanceof Backbone.Model); 

El operador instanceof comprueba si un objeto tiene en su prototipo cadena la propiedad prototipo de un constructor.

+0

Genial. aún no había aprendido eso. ¡Gracias! –

+0

@Ben: De nada – Sarfraz

2

Una comprobación del tipo de un objeto es un olor a código en idiomas como JavaScript.

Si necesita saber que su colección devuelve un modelo específico cuando llama a un método específico, llene la colección con modelos conocidos y haga la comparación con esos modelos.

MyModel = Backbone.Model.extend({}); 

MyCollection = Backbone.Collection.extend({ 
    model: MyModel, 

    getThatOne: function(){ 
    return this.at[0]; 
    } 
}); 


m1 = new MyModel(); 
m2 = new MyModel(); 

col = new MyCollection([m1, m2]); 

retrieved = col.getThatOne(); 

retrieved === m1 //=> true 
+0

¡Gracias por responder, Derick! Sus artículos sobre Los Techies han sido de gran ayuda. Me doy cuenta de que la verificación de tipos es desagradable en cualquier lenguaje dinámico, pero de vez en cuando hago una excepción al escribir pruebas, pero creo que probablemente debería evitarlo también cuando sea posible. –

Cuestiones relacionadas