Pregunta

Estoy usando la biblioteca Google.MAPS dentro de un modelo de columna vertebral como este (Coffeescript):

class Route extends Backbone.Model

  initialize: ->
    @directionsService = new google.maps.DirectionsService()

En mis pruebas, cada vez que trato de instanciar un Route, Obviamente me encuentro con un problema. ¿Cómo puedo agitar? google ¿En mi prueba para que no cause este problema?

¿Fue útil?

Solución

No sé mucho sobre Coffescript, pero puede darle al Constructor del Modelo un segundo objeto como argumento.

var mymodel = new Route({/*attributes*/}, {directionService: yourStub});

Luego, en la función de inicializar, escribiría:

initialize: function(atts, options) {
  this.directionService = options.directionService || new google.maps.DirectionsService();
}

Ahora puede agitar el servicio de dirección o usar otro (si hay alguna) para instancias individuales.

Otra forma sería reemplazar el servicio de direcciones directamente:

var origService = google.maps.DirectionsService;
google.maps.DirectionsService = function() {/*your stub*/};
var route = new Route();
google.maps.DirectionsService = origService;

Otros consejos

Una de las principales falla cuando intenta escribir código comprobable es crear nuevas instancias en su objeto que desea probar. Hay una llamada de patrón Inversión de control Eso ayuda a escribir código comprobable. El truco es que todas las cosas que crearías en tu clase se inyectarán en el constructor. Al hacerlo de esta manera, en su prueba puede inyectar un simulacro o un trozo simple. Entonces, la respuesta de Protom es sobre este patrón.

Otra solución: en JavaScript podemos anular fácilmente cada objeto/función por nuestra propia. Lo que significa que puede crear su propio servicio de direcciones de Google.Map. Por cierto, sería mejor probar su código sin dependencias a otras libs, por lo que debe crear su propio objeto de Google con los métodos que necesita.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top