2016-02-15 3 views
0

J'ai le point POST de téléchargement de fichier dans mon serveur Hapi.Js. Voici le code:Comment correct couvrir ce cas de test dans Hapi.js Lab?

server.route([{ 
method: 'PUT', 
path: '/upload/{id}', 
config: { 
    handler: function(req,res) { 
     async.waterfall([ 
      function checkEntityInDbExists(req.params.id,callback) { 
       ... 
       callback(null, entityId); 
      }, 
      function uploadPictureToAWS(entityId, callback) { 
       ... 
       callback(null, imageLink); 
      }, 
      function savePictureLinkInDbEntity(entityId, callback) { 
       ... 
       callback(null, imageLink); 
      } 
     ], function(err, result) { 
      if (err) { 
       return reply(err); 
      } 
      return reply(result); 
     }); 
    } 
} 

}]);

Comment correctement couvrir le cas "devrait retourner le chemin de l'image téléchargée" pour ce code/point sans frapper DB et AWS?

Répondre

1

Je pense que vous pourriez avoir besoin d'un package tel que proxyquire, pour vous aider à définir des méthodes et les rendre des résultats valides afin que votre logique puisse continuer.

Exemple d'utilisation (de Async-Hapi-Test-Example):

var assert = require("assert"); 
var chai = require("chai"); 
var sinon = require("sinon"); 
var sinonChai = require("sinon-chai"); 
var proxyquire = require("proxyquire").noCallThru(); 
var expect = chai.expect; 

chai.should(); 
chai.use(sinonChai); 

describe("Testing route index", function() { 
    var sut; 
    var db; 
    var aws; 
    beforeEach(function() { 
     db = { 
      check: sinon.spy(), 
      savePic: sinon.spy(function(){ return "a link?"; }) 
     } 
     aws = { 
      upload: sinon.spy() 
     } 
     sut = proxyquire('./index', {"./db": db, "./aws": aws}); 
    }); 

    describe("upload", function() { 
     it("should pass", function(done){ 
      var request = { 
       params: { 
        id: 9001 
       } 
      } 
      var reply = function(results) { 
       results.should.equal('a link?'); 
       db.check.should.been.calledOnce; 
       db.savePic.should.been.calledOnce; 
       aws.upload.should.been.calledOnce; 
       done(); 
      } 
      sut[0].config.handler(request, reply); 
     }); 
    }); 
}); 
+0

Salut! Pourriez-vous fournir votre adresse e-mail à la connexion? –

+0

@Roman désolé je ne me sens pas à l'aise de donner mon email. Pour être en mesure d'aider, je pense que tout ce que vous avez besoin d'ajouter à votre exemple de code est ce que vous exigeant et les méthodes de votre appel et je pense que je pourrais vous aider davantage. – MrB

+1

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. - [À revoir] (/ review/low-quality-posts/11354203) –