2011-11-06 2 views
0

J'essaie de simuler la demande de géocodage en utilisant FakeWeb (en concombre/rails). Lorsque je bloque toutes les requêtes HTTP je reçois le message:Stub out une demande à google maps api dans mes tests

Real HTTP connections are disabled. Unregistered request: GET 
http://maps.google.com/maps/api/geocode/json?..... (FakeWeb::NetConnectNotAllowedError) 

J'enregistré l'URL en essayant: « Un texte JSON doit contenir au moins deux octets »

FakeWeb.register_uri(:any, %r|http://maps\.google\.com/maps/|, :json 
=> { 
    "status": "OK", 
....} 

Je reçois l'erreur (MultiJson :: DecodeError) Je ne suis pas sûr de l'information à retourner. Et comment FakeWeb peut renvoyer des données json .. Quelqu'un a-t-il une solution pour supprimer les demandes de serveur à l'API google maps?

+0

Vous voulez probablement faire un json une chaîne, pas un hachis rubis. –

Répondre

2

L'erreur "A JSON text must at least contain two octets!" indique que la chaîne JSON que vous utilisez pour remplacer la réponse n'est pas valide. Essayez d'exécuter MultiJson.decode(json_string) avec votre chaîne JSON avant de l'enchaîner avec; Cela devrait vous aider à identifier l'erreur.

Si vous ne souhaitez pas traiter les détails de la création de l'API google maps, vous pouvez utiliser VCR; il va enregistrer une réponse réelle pour vous et l'utiliser pour remplacer la requête lors des tests ultérieurs. C'est un moyen beaucoup plus facile d'obtenir des réponses stubbed réalistes dans vos tests.