Модуль unit.export Тестовый выпуск в Jest - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть две функции на странице, и они содержат много jQuery. Код ниже

 module.exports = function(property) {
    var data = decodeEntities(property)
}

function decodeEntities(encodedString) {
     let textArea = document.createElement('textarea');
     textArea.innerHTML = encodedString;
     return textArea.value;
}

Мне нужно написать контрольные примеры для функции decodeEntities. Но я не имею права изменять module.exports = function(property) этот код, потому что его вызов из шаблона руля.

Теперь, как я могу проверить модульный тест функции decodeEntities без его экспорта?

1 Ответ

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

Вы можете использовать модуль rewire , чтобы получить функцию decodeEntities, которая не экспортируется. Например,

index.js:

module.exports = function(property) {
  var data = decodeEntities(property);
};

function decodeEntities(encodedString) {
  let textArea = document.createElement('textarea');
  textArea.innerHTML = encodedString;
  return textArea.value;
}

index.test.js:

const rewire = require('rewire');
const mod = rewire('./');

describe('60349818', () => {
  describe('#decodeEntities', () => {
    it('should pass', () => {
      const mElement = { innerHTML: '', value: 'some value' };
      const mCreateElement = jest.fn().mockReturnValueOnce(mElement);
      mod.__set__('document', {
        createElement: mCreateElement,
      });
      const decodeEntities = mod.__get__('decodeEntities');
      const actual = decodeEntities('encodedString');
      expect(actual).toEqual('some value');
      expect(mCreateElement).toBeCalledWith('textarea');
    });
  });
});

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

 PASS  stackoverflow/60349818/index.test.js
  60349818
    #decodeEntities
      ✓ should pass (4ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        3.334s

исходный код: https://github.com/mrdulin/react-apollo-graphql-starter-kit/tree/master/stackoverflow/60349818

...