Charger l’API Google Maps dans jsdom

J’essaie de charger l’API Google Maps dans jsdom. Plus précisément, je souhaite obtenir les données de la fonction de rappel getPanorama. Cependant, lorsque j’exécute le code suivant, le message «Exécuté sans erreur» s’affiche, mais aucun des messages «statut ok» ou «statut non correct» ne s’affiche.

var jsdom = require("jsdom"); var cafe = {lat: 51.47803167, lng: 0.141212256}; jsdom.env({ html: "", scripts: ["https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"], done: function (err, window) { if (err) { console.log('Error is' + err); } else { // console.log(window.google); var google = window.google; var sv = new google.maps.StreetViewService(); sv.getPanorama({location: cafe}, function(data, status) { if (status === 'OK') { console.log('status ok'); console.log(data); } else { console.log('status not ok'); } }); console.log('Executed with no error'); } } }); 

J’ai également essayé de modifier le code et d’utiliser jsdom.jsdom à la place de env, mais rien n’a fonctionné. Des idées sur la façon dont je peux récupérer les données du rappel dans mon code de noeud?

J’ai trouvé une solution. Notez que cet exemple de code utilise une version plus récente de l’API JSDOM:

 function runGmaps(lat, lng) { const jsdom = require("jsdom"); const { JSDOM } = jsdom; const dom = new JSDOM(`    
`, { runScripts: "dangerously", resources: "usable" }); }

Même si la solution est trouvée, je peux partager la solution que j’ai utilisée, qui est moins détaillée.

jsdom 11.6.2 utilisé pour le test d’intégration avec jest

 import GeolocationService from './geolocation' import { JSDOM } from 'jsdom' const getGoogleApi = () => new Promise(res => { const {window} = new JSDOM(`      `, {runScripts: 'dangerously', resources: 'usable'}) window.googleReady = () => { res(window.google) } }) it('test GeolocationService', async () => { const google = await getGoogleApi() const sut = new GeolocationService({googleApi: google}) const suggestions = await sut.getSuggestions({ input: 'bratis', anchorLocation: { latitude: 48.669, longitude: 19.699 } }) suggestions.forEach(s => { expect(s).toHaveProperty('id') expect(s).toHaveProperty('name') expect(s).toHaveProperty('terms') const {terms, name} = s expect(name.startsWith('Bratis')).toBe(true) expect(Array.isArray(terms)).toBe(true) expect(name.startsWith(terms[0])).toBe(true) }) })