如何重新布线或嘲笑真实模块的HTTP请求响应调用?

时间:2018-08-30 08:36:50

标签: express mocking mocha

  

**************************** api / index.js *************** *************

 exports.search = function (req, res) {
    const requestObj = {
                 //Dummy Payload
               };
    const data = '432';
    request({
        url: 'config.url,
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        json: true,
        body: requestObj
    }, (error, response) => {
        if (error) {
            return res.status(error.statusCode).json(error);
        }
        console.log('data', data);
        return res.status(response.statusCode).json(response.body);
    });
};
  

**************************** api / index.js *************** *************

     

**************************** test / index.js *************** *************

// unit tests
    const chai = require('chai');
    const sinon = require('sinon');
    const httpMocks = require('node-mocks-http');
    const rewire = require('rewire');
    const logger = require('../../../log/winston');
    const axios = require('axios');

    const expect = chai.expect;

    const search = rewire('../../api/index');
    const loadMethod = search.__set__('search');


function verifySearch(products, expectedHit) {
    expect(products.item.name).to.equal(expectedHit.item.name);
}

describe('Search Module Route Unit Tests', () => {
    describe('get product based  on search keywords routehandler', () => {
        let sandbox;
        beforeEach(() => {
            sandbox = sinon.sandbox.create();
        });

        afterEach(() => {
            sandbox.restore();
        });

        it('should call the search with search keywords', (done) => {
            const axiosSpy = sandbox.stub(axios, 'post').returns(Promise.resolve({ data: fakeResponse }));
            // setTimeout(done, 300);

            const request = httpMocks.createRequest({
                method: 'POST',
                url: '/api/v1/search',
                body: {
                    Keywords: ['blue']

                }
            });

            const response = httpMocks.createResponse({
                eventEmitter: require('events').EventEmitter
            });

            loadMethod(request, response);
             response.on('end', () => {
                const responseData = JSON.parse(response._getData());
                   verifySearch(responseData, fakeResponse);
                done();
            });
            expect(axiosSpy.calledOnce).to.equal(false);
        });
    });
});

**************************** test / index.js *************** *************

const fakeResponse = {
       "item":{
               "name":"Detole"
            }

}

**

  

我需要在模拟实际调用的情况下对真实模块进行调用,但是   响应,我想设置虚拟响应。

**

0 个答案:

没有答案