1. Если в ваших приватных методах много важной логики, которую надо тестировать – это сигнал, что пора эту логику вынести в отдельный класс, методы которого будут публичными и передавать его, как зависимость (DI) в конструктор исходного класса.
Так вы (1) сделаете свой основной класс тоньше и ближе к SOLID, (2) не столкнетесь с проблемой тестирования приватных методов.
2. Исходя из первого пункта, можно также заключить, что само по себе “тестирование приватных методов” – нелогичная идея. Они должны быть небольшими и утилитарными, поскольку настоющую ценность для вашего приложения имеют как раз таки публичные методы (другие компоненты приложения могут вызывать только их).
3. Если уж никак не получается / не хочется выделять в отдельный класс, то есть лайфхак:
В файле теста наследуете тестируемый класс и объявляете у него публичные методы, которые под собой просто вызывают приватные. Пример:
// user.ts class User { private hashPassword(password: string): void { …. } } // user.test.ts class UserForTest extends User { public testHashPassword(password: string): void { return this.hashPassword(password) } }