2015-01-03 2 views
6

간단한 단위 테스트를 위해 hapi 답신 개체/기능을 조롱하는 간단한 방법이 있습니까?단위 테스트를 위해 sinon을 사용하여 hapi.js 회신을 모의하는 방법

내가 hapi에서 본 예제는 모두 테스트를 위해 server.inject와 "lab"프레임 워크를 사용합니다. 모카를 계속 사용하는 방법을 알고 궁금해서 서버에 직접 주입하는 대신 컨트롤러를 직접 테스트하고 싶습니다.

sinon을 사용하여 응답 객체를 조롱해야합니까?

테스트/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 

    }); 

컨트롤러/post.js 마지막으로

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

    } 
} 

, 방금 대신 실험실로 전환해야합니까?

답변

3

server.inject()도 모카와 함께 사용할 수 있습니다. 난 그냥 Post.save() 스텁 것 : 그래서

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

: 오류를 테스트하려면

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

, 당신은 단지 스텁을 수정해야합니다 좀 더 코드와

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

게시물 저장시 sinon 스텁을 선언하면 서버 컨트롤러가 호출 할 save 메서드가 재정의됩니까? – MonkeyBonkey

+0

@MonkeyBonkey 예, 가능합니다. –

관련 문제