2015-01-03 21 views
6

के लिए sinon के साथ hapi.js का जवाब कैसे करें आसान यूनिट परीक्षण के लिए हैपी उत्तर ऑब्जेक्ट/फ़ंक्शन का मज़ाक करने का कोई आसान तरीका है?यूनिट परीक्षण

उदाहरण हैं जो मैं हैपी के लिए देखता हूं सभी सर्वर.inject और परीक्षण के लिए "लैब" फ्रेमवर्क का उपयोग करते हैं। मैं यह देखने के लिए उत्सुक हूं कि मैं मोचा का उपयोग कैसे कर सकता हूं और सर्वर में इंजेक्शन करने के बजाय सीधे नियंत्रक का परीक्षण करना चाहता हूं।

क्या मुझे उत्तर वस्तु का नकल करने के लिए साइनऑन का उपयोग करना चाहिए?

परीक्षा/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' }); }); 
कुछ और कोड के साथ

आप पोस्ट सेव पर साइनऑन स्टब घोषित करते हैं, क्या यह सर्वर नियंत्रक को सहेजने वाली सहेजने वाली विधि को ओवरराइड करेगा? – MonkeyBonkey

+0

@MonkeyBonkey हां, यह होगा। –

संबंधित मुद्दे