sinon js: заглушка sinon не работает для экспортируемой функции - PullRequest
0 голосов
/ 26 марта 2020

Я не могу заглушить функцию functionToStub, когда я require запишу ее в файле контроллера, для которого пишу тест мокко.

Вот пример того, чего я пытаюсь достичь

file1. js - файл контроллера

const functionUtil = require('./useFunc');

const newEndpoint = (req, res) => {

if(functionUtil.functionToStub()){
                    return "DID NOT STUB"
                }
                else{
                  return "DID STUB"
                }

}

useFun c. js

var functions = {
    functionToStub: functionToStub
}
function functionToStub (){
    return true
}

module.exports = functions;

мокко. js

const featureUtil = require('/useFunc')

   describe('When I call endpoint to stub', (done) => {
        var newStub;
        before(function(done) {

            newStub = sinon.stub(featureUtil, 'functionToStub')
            newStub.returns(false)

            chai.request(app.start())
            .post(`/api/testMyStub`)
            .send({'test':'testBody'})
            .end((err, res) => {
             console.log(res.body) // Expecting DID STUB to print here but the stub doesn't work, prints DID NOT STUB
             done();
            });
        });
        after(function(done) {
            newStub.restore();
            done();
        })
        it('should send an request', (done) => {
            expect(newStub).to.have.been.calledOnce
            done()

        }); 

    });

1 Ответ

0 голосов
/ 27 марта 2020

Мне удалось добиться этого с помощью proxyquire. Мне пришлось немного переписать вызовы функций, чтобы заставить его работать. Я добавляю обновленный контрольный пример:

const featureUtil = require('/useFunc')
var proxyquire =  require('proxyquire')

isLegacyPrintingEnabledStub = sinon.stub(featureUtil, 'functionToStub')
var isLegacyPrintingEnabledUtil = proxyquire('../../api/controllers/file1', {"featureUtil" : {'functionToStub': stubbedFunction }});
stubbedFunction.returns(false)

describe('When I call endpoint to stub', (done) => {

        before(function(done) {

            chai.request(app.start())
            .post(`/api/testMyStub`)
            .send({'test':'testBody'})
            .end((err, res) => {
             console.log(res.body) // Logs DID STUB as expected
             done();
            });
        });
        after(function(done) {
            newStub.restore();
            done();
        })
        it('should send an request', (done) => {
            expect(stubbedFunction).to.have.been.calledOnce
            done()

        }); 

    });

После этого я смог увидеть код возврата DID STUB ожидаемым образом.

...