Есть ли способ протестировать неэкспортированные функции с помощью 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(...
});
Есть идеи или предложения?Спасибо!