2016-02-17 1 views
1

Dans mon projet, j'essaie de développer les tweets pour qu'ils s'affichent entièrement. Les liens court-circuités par bit.ly sont étendus par cette paix de code (found @ stackoverflow).Simulation d'une demande HEAD pour une redirection (via un module de connexion)

function expandUrl(shortUrl,callback) { 
    debug("expandUrl"); 
    request({ method: "HEAD", url: shortUrl, followAllRedirects: true }, 
    function (error, response) { 
     if (error) return callback(null,shortUrl); 
     return callback(null,response.request.href); 
    } 
); 
} 

ne pas avoir besoin d'être en ligne lors des tests de mocha, je voudrais encocher cette partie du code avec les éléments suivants:

nock('http://bit.ly') 
     .intercept("/1Ghc7dI","HEAD") 
     .reply(200,undefined,{location:"http://discoverspatial.com/courses/qgis-for-beginners"}); 

Mais cela ne fonctionne pas. response.request.href est "indéfini" après ce travail. (J'ai essayé href au lieu de l'emplacement, cela ne fait aucune différence

+0

voulez-vous vraiment une réponse '301',' 302' ou '307'? '200' semble être le mauvais code de réponse pour ce que vous voulez faire – apsillers

Répondre

3

Pour donner une redirection, vous devez définir le statut à un statut de redirection d'URL HTTP comme @apsillers dit dans les commentaires.Si vous ne voulez pas être en ligne, vous devez encocher l'URL de destination ainsi, car la demande va l'appeler pour vérifier que ce n'est pas une redirection:

nock('http://bit.ly') 
     .intercept("/1Ghc7dI","HEAD") 
     .reply(301,undefined,{location:"http://discoverspatial.com/courses/qgis-for-beginners"}); 

nock('http://discoverspatial.com') 
     .intercept("/courses/qgis-for-beginners", "HEAD") 
     .reply(200,"OK"); 
+0

Merci, cela fonctionne. – TheFive