2015-01-03 25 views
6

Kolay ünite testi için hapi yanıt nesnesini/işlevini alay etmenin basit bir yolu var mı?hapi.js birim test için sinonla nasıl yanıt verilir

Hapi için gördüğüm örnekler test için sunucu.inject ve "lab" çerçevesini kullanıyor. Mocha'yı nasıl kullanabileceğimi görmek ve sunucuya enjekte etmek yerine doğrudan denetleyiciyi test etmek istediğimi merak ediyorum.

Yanıt nesnesini taşımak için sinon kullanmalı mıyım?

test/post.js

before(function() { 
    PostController = proxyquire('../controllers/post', { 'mongoose': mongooseMock }); 
    }); 


    it('should be able to create a post', function(done){ 

    var request.payload = {foo:bar}; 
    var reply = sinon.spy(); //is this how I should mock this? 
    PostController.create.handler(request, reply); 
    reply.should ...// how do I test for statuscode 201, Boom errors, and response msgs 

    }); 

kontrolörleri/post.js Nihayet

var Boom = require('Boom') 
    Post = require('../models/Post') 
module.exports = { 

    create: { 
    auth: 'token', 
    handler: function (request, reply) { 

    var p = new Post({foo:request.payload.foo}); 
    p.save(function (err, results) { 
     if (!err && results) 
      reply(results).created(); 
     else { 
      reply(Boom.badImplementation(err)); 
     } 
     }); 

    } 
} 

, sadece yerine laboratuara geçiş gerekir?

cevap

3

server.inject()'u Mocha ile de kullanabilirsiniz. Sadece Post.save() saplama olacaktır: ne zaman bu kadar

it('returns an error when save fails', function (done) { 

    Sinon.stub(Post, 'save', function (callback) { 

     callback(new Error('test'), null); 
    }); 

    server.inject({ method: 'POST', url: '/posts', payload: { foo: 'bar' } }, function (res) { 

     Post.save.restore();  

     expect(res.statusCode).to.equal(500); 
     done(); 
    }); 
}); 
+0

: Eğer hata için test etmek isterseniz

it('creates a post', function (done) { Sinon.stub(Post, 'save', function (callback) { callback(null, { foo: 'bar' }); }); server.inject({ method: 'POST', url: '/posts', payload: { foo: 'bar' } }, function (res) { Post.save.restore(); expect(res.statusCode).to.equal(201); done(); }); }); 

, sadece saplama değiştirmeniz gerekir: biraz daha kod ile

Sinon.stub(Post, 'save', function (callback) { callback(null, { foo: 'bar' }); }); 

Gönderim sırasında sinon sapladığını bildirirseniz, sunucu denetleyicisinin arayacağı kaydetme yöntemini geçersiz kılar mı? – MonkeyBonkey

+0

@MonkeyBonkey Evet, olacak. –