2016-02-15 4 views
0

У меня есть точка загрузки POST на моем сервере Hapi.Js. Вот код:Как правильно покрыть этот тестовый пример в лаборатории Hapi.js?

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); 
     }); 
    } 
} 

}]);

Как правильно покрыть корпус «должен вернуть путь загруженного изображения» для этого кода/точки без попадания в БД и AWS?

ответ

1

Я думаю, вам может понадобиться пакет, такой как proxyquire, чтобы помочь вам издеваться над методами и заставить их возвращать действительные результаты, чтобы ваша логика продолжалась.

Пример использования (от 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

Привет! Не могли бы вы предоставить свою электронную почту для подключения? –

+0

@Roman извините, я не чувствую себя комфортно, отдавая свою электронную почту. Чтобы быть в состоянии помочь, я думаю, что все, что вам нужно добавить к вашему примеру, - это то, что вы требуете, и методы вашего вызова, и я думаю, что смогу помочь вам в дальнейшем. – MrB

+1

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/11354203) –

Смежные вопросы