Что ж, вы сталкиваетесь с проблемами при тестировании обеих функций, тогда вам нужно реорганизовать код. Потому что я считаю, что ваш код нельзя тестировать. Я даю вам этот длинный пример, который содержит обе ваши функции, но может быть протестирован.
Изменения, которые я сделал для рефакторинга:
- функция uploadDo c теперь будет выводить массив.
- функция toSave теперь потребует 1 параметр, который является массивом.
- объединить функции в класс.
const sinon = require('sinon');
const { expect } = require('chai');
const Doc = {
/**
* @return array of file location.
*/
uploadDoc: () => {
const sample = [];
sample.push('fileLocation');
return sample;
},
/**
* @param array samples
* @return void
*/
toSave: (samples) => {
samples.forEach(() => {
// Some process read and access doc.
})
},
}
/**
* This is for example purposes.
* @return void.
*/
function integrationBothFunction () {
const samples = Doc.uploadDoc();
Doc.toSave(samples);
}
describe('Unit Test', function () {
it('uploadDoc fn', function () {
const result = Doc.uploadDoc();
// You expect the result to be an array.
expect(result).to.be.an('array');
});
it('toSave fn', function () {
const samples = [];
const spySamples = sinon.spy(samples, 'forEach');
// Call the function
Doc.toSave(samples);
// You expect: there is forEach called for samples.
expect(spySamples.calledOnce).to.equal(true);
// Do not forget to restore.
spySamples.restore();
});
it('integrationBothFunction fn', function () {
// This is just sample to check.
const testSample = ['x'];
// Now finally, you can stub uploadDoc.
// Where real uploadDoc function not get called.
const stubUploadDoc = sinon.stub(Doc, 'uploadDoc');
stubUploadDoc.returns(testSample);
// Spy on toSave fn.
const spyToSave = sinon.spy(Doc, 'toSave');
integrationBothFunction();
// You expect that toSave is processing output from uploadDoc.
expect(stubUploadDoc.calledOnce).to.equal(true);
expect(spyToSave.calledOnce).to.equal(true);
// Check argument toSave.
const { args } = spyToSave;
expect(args).to.have.lengthOf(1);
expect(args[0]).to.have.lengthOf(1);
expect(args[0][0]).to.include(testSample[0]);
// Restore spy and stub.
stubUploadDoc.restore();
spyToSave.restore();
});
});
Я использую мокко:
$ npx mocha stackoverflow.js
Unit Test
✓ uploadDoc fn
✓ toSave fn
✓ integrationBothFunction fn
3 passing (13ms)
$
Надеюсь, это поможет. Удачи!