Question

J'utilise la bibliothèque google.maps dans un modèle Backbone comme celui-ci (coffeescript):

class Route extends Backbone.Model

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

Dans mes tests, je chaque fois que j'essaie de instancier un Route, je suis évidemment pour courir un problème. Comment puis-je bouchonner google dans mon test afin qu'il ne causera pas ce problème?

Était-ce utile?

La solution

Je ne sais pas beaucoup sur coffeescript, mais vous pouvez donner le constructeur de modèle un second objet comme argument.

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

Ensuite, dans la fonction initialize vous écririez:

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

Maintenant, vous pouvez bouchonner le service de direction ou utilisez une autre (s'il y en a) pour les cas individuels.

Une autre façon serait de remplacer le DirectionService directement:

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

Autres conseils

L'un des principaux échec lorsque vous essayez d'écrire du code testable est de créer de nouvelles instances dans votre objet que vous souhaitez tester. Il y a un modèle d'appel Inversion de contrôle qui permet d'écrire du code testable. L'astuce est que toutes les choses que vous voulez créer dans votre classe sera injectée dans le constructeur. En procédant ainsi, dans votre test, vous pouvez simplement injecter une maquette simple, ou talon. Donc, la réponse de Protom est sur ce modèle.

Une autre solution: En JavaScript, nous pouvons facilement remplacer tous les objets / fonction de notre propre. Ce qui signifie que vous pouvez créer votre propre DirectionsService de google.map. BTW il préférable de tester votre code sans aucune dépendance à d'autres bibliothèques, vous devez créer votre propre objet google avec les méthodes dont vous avez besoin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top