Протестируйте или смоделируйте неэкспортированную функцию с Jest, используя TypeScript - PullRequest
0 голосов
/ 14 февраля 2019

Есть ли способ протестировать неэкспортированные функции с помощью Jest с использованием TypeScript?Я видел SO ответы, рекомендующие некоторые библиотеки, такие как rewire, но кажется, что они еще не совместимы с TypeScriptДругой способ - экспортировать эти частные функции, но я думаю, что должно быть решение без экспорта только для целей тестирования.

Настройка следующая.Есть две функции, одна экспортируется, а другая нет.

export function publicFunction() {
  privateFunction();
}

function privateFunction() {
  // Whatever it does
}

В моих юнит-тестах есть два случая, которые я хочу решить.Тестирование самого privateFunction и проверка его на publicFunction тесты.

Я использую ts-jest для компиляции файлов машинописного текста при тестировании. jest.config.json выглядит так:

{
  "transform": {
    "^.+\\.(t|j)sx?$": "ts-jest"
  },
  "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(tsx?)$",
  "moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"],
  "testEnvironment": "node",
  "globals": {
    "ts-jest": {
      "tsConfig": "test/tsconfig.spec.json"
    }
  }
}

Я знаком с jest.fn(), но не знаю, как перезаписать или извлечь приватную функцию.И юнит-тест будет что-то вроде

import { publicFunction } from '../src';

describe('publicFunction', () => {
  it('should call "privateFunction" once', () => {
    // Overwrite privateFunction with jest.fn();

    publicFunction();

    expect(...).toHaveBeenCalled(1);
  });
});

Или для проверки приватной функции, для которой импорт невозможен.

import { privateFunction } from '../src/index'

describe('privateFunction', () => {
  it(...
});

Есть идеи или предложения?Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...