Как имитировать вложенные зависимости в NodeJS - PullRequest
0 голосов
/ 06 августа 2020

У меня есть модуль a

const b = require(./b);

function aGetResult() {
  return b.getInfo();
}

модуль B

const c = require(./c);
    
function getInfo() {
  return getDetailInfo();
}

function getDetailInfo() {
    const result = c.getApiResult();
    return result
}

модуль C

function getApiResult() {
  return api.get(/test/1);
}

Я написал тест для модуля A но у меня проблема с зависимостями заглушки. Я просто хочу заглушить c.getApiResult(), а не b.getInfo() или b.getDetailInfo(). Я пробовал выборочно заглушить, используя proxyquire, но у меня возникли проблемы. Любая помощь?

1 Ответ

0 голосов
/ 07 августа 2020

Вы должны использовать Global override require of proxyquire package.

Например

a.js:

const b = require('./b');

function aGetResult() {
  return b.getInfo();
}

exports.aGetResult = aGetResult;

b.js :

const c = require('./c');

function getInfo() {
  return getDetailInfo();
}

function getDetailInfo() {
  const result = c.getApiResult();
  return result;
}

module.exports = { getInfo };

c.js:

const api = {
  get(url) {
    return 'real result';
  },
};

function getApiResult() {
  return api.get('/test/1');
}

module.exports = { getApiResult };

a.test.js:

const proxyquire = require('proxyquire');
const { expect } = require('chai');
const sinon = require('sinon');

describe('63275147', () => {
  it('should pass', () => {
    const stubs = {
      './c': {
        getApiResult: sinon.stub().returns('stubbed result'),
        '@global': true,
      },
    };
    const a = proxyquire('./a', stubs);
    const actual = a.aGetResult();
    expect(actual).to.be.eq('stubbed result');
    sinon.assert.calledOnce(stubs['./c'].getApiResult);
  });
});

результат модульного теста:

  63275147
    ✓ should pass (2630ms)


  1 passing (3s)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |   83.33 |      100 |      60 |   83.33 |                   
 a.js     |     100 |      100 |     100 |     100 |                   
 b.js     |     100 |      100 |     100 |     100 |                   
 c.js     |      50 |      100 |       0 |      50 | 3-8               
----------|---------|----------|---------|---------|-------------------
...