2015-01-03 16 views
6

簡単な単体テストのためのhapi replyオブジェクト/関数を模擬する簡単な方法はありますか?単体テストのためにsinonでhapi.js replyを模倣する方法

hapiの例では、すべてserver.injectと「lab」フレームワークを使用してテストしています。私はmochaの使い方を知りたいと思っていて、サーバーに注入するのではなくコントローラを直接テストしたいと思っています。

私は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スタブを宣言すると、サーバコントローラが呼び出すセーブメソッドがオーバーライドされますか? – MonkeyBonkey

+0

@MonkeyBonkeyはい、そうです。 –

関連する問題