Хотел бы я иметь лучший ответ для тебя, Джордан. In В прошлом у меня был очень похожий вопрос в контексте JS и C # ...
Ответ, не отвечаю
В какой-то момент мне пришлось принять тот факт, что если мне нужны детальные модульные тесты, которые охватывают неэкспортированные / частные функции / методы, я действительно должен их разоблачить. Некоторые люди скажут, что это нарушение инкапсуляции, а другие не согласны с этим. Первая группа людей также сказала бы, что до тех пор, пока функция не будет экспортирована / общедоступна, это, по сути, деталь реализации, поэтому она не должна подвергаться модульному тестированию.
Если вы практикуете TDD, тогда объяснение Марка Симана должно быть уместным (PluralSight) и, надеюсь, прояснит, почему можно выставлять вещи.
Я не знаю, сможете ли вы найти какой-нибудь трюк для вызова неэкспортированных функций непосредственно из ваших модульных тестов без внесения изменений в тестируемый код, но я бы не стал так поступать лично.
Просто опция
Другой вариант - разделить вашу библиотеку на две части. Скажем, библиотека A
- это код вашего приложения, а библиотека B
- это пакет, содержащий все те функции, которые вы хотели бы избежать при экспорте из интерфейса A
.
Если это две разные библиотеки, вы можете на очень хорошем уровне контролировать то, что раскрывается и как оно проверяется. Библиотека A
будет зависеть от B
без утечки каких-либо подробностей B
. И A
, и B
могут тестироваться независимо.
Это потребует другой организации кода, конечно, но это будет работать. Такие инструменты, как Lerna, упрощают многопакетные репозитории для кода JavaScript.
примечание
Я не согласен с @ AlexSzabó, если честно. Тестирование неэкспортированной функции путем тестирования функций, которые ее используют, на самом деле не является модульным тестированием.