Заглушка функция, которая экспортирует метод - PullRequest
0 голосов
/ 09 марта 2020

Я использую модуль adm-zip, и вот как я добавляю его в свой файл.

const AdmZip = require('adm-zip');
let zip = new AdmZip(filePath);
const response = await zip.extractAllTo(outputPath, true);

Сейчас я пишу тестовые примеры и пытаюсь заглушить AdmZip, потому что, как показано здесь , оно экспортирует функцию и при вызове с новым возвращает объект, у которого есть метод, который я хочу заглушить.

Я попытался сделать sinon.stub(AdmZip.prototype, 'extractAllTo').returns('test');, но выдает ошибку, говорящую extractAllTo свойство не существует.

Как заглушки AdmZip и его метод extractAllTo ?

1 Ответ

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

Вам нужно использовать модуль proxyquire , чтобы заглушить модуль adm-zip.

Например,

index.js:

const AdmZip = require('adm-zip');

async function main() {
  const filePath = 'some file path';
  const outputPath = './dist';
  const zip = new AdmZip(filePath);
  const response = await zip.extractAllTo(outputPath, true);
}

module.exports = main;

index.test.js:

const sinon = require('sinon');
const proxyquire = require('proxyquire');

describe('60595390', () => {
  it('should extract all', async () => {
    const admZipInstance = {
      extractAllTo: sinon.stub(),
    };
    const admZipStub = sinon.stub().callsFake(() => admZipInstance);
    const main = proxyquire('./', {
      'adm-zip': admZipStub,
    });
    await main();
    sinon.assert.calledWithExactly(admZipStub, 'some file path');
    sinon.assert.calledWithExactly(admZipInstance.extractAllTo, './dist', true);
  });
});

Результаты модульного теста со 100% покрытием:

  60595390
    ✓ should extract all (2951ms)


  1 passing (3s)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |     100 |      100 |     100 |     100 |                   
 index.js |     100 |      100 |     100 |     100 |                   
----------|---------|----------|---------|---------|-------------------
...