Я использую Mocha/Chai для тестирования кода интерфейса JavaScript, и теперь мы переключились на TypeScript. У меня есть несколько функций, которые я хочу проверить. Но они не должны быть экспортируемыми. Могу ли я получить доступ к этим функциям и протестировать его, не добавляя к ним export
?Тестирование функции TypeScript, которая не экспортируется
ответ
Там нет никакого способа, чтобы получить доступ к неэкспортированной функции модуля.
module MyModule {
function privateFunction() {
alert("privateFunction");
}
}
MyModule.privateFunction(); // Generates a compiler error
Однако, оставляя в стороне вопрос о действительности частного тестирования методов, вот что вы можете сделать.
Сгруппируйте свои функции в класс утилиты, а затем используйте тот факт, что к частным членам класса можно получить доступ через квадратную скобку.
module MyModule {
export class UtilityClass {
private privateFunction() {
alert("privateFunction");
}
}
}
var utility = new MyModule.UtilityClass();
//utility.privateFunction(); Generates a compiler error
utility["privateFunction"](); // Alerts "privateFunction"
Но они не должны быть экспортируемыми. Могу ли я получить доступ к этим функциям и проверить его, не добавляя к ним экспорт?
В общем, нет. Можно получить доступ к членам частного класса, но не к невыполненным членам модулей.
Я бы ответил на комментарии @ Katana314 - модульные тесты не должны относиться к ним с помощью непубличных методов. Попытка сделать это - это указание на то, что вы проверяете детали реализации модуля, а не контракт, который модуль требует реализовать.
Итак, я должен экспортировать функцию, если я хочу ее протестировать или заменить на заглушку. Я прав? – michaeluskov
Конкуренция заключается в том, что вы не должны экспортировать что-то исключительно для тестирования. Вы тестируете модуль, чтобы убедиться, что передача в наборе значений дает ожидаемые результаты, а не внутренний поток обработки внутри модуля. – Brocco
Как вы можете видеть в связанных с этим вопросов вопрос о проверке частных функций внутри классов или модулей сильно обсуждавшихся на StackOverflow - следующее может быть архитектурное решение даже не это обсуждение:
Если эти функции чувствовать себя важными достаточно для тестирования отдельно, но не должны быть доступны как часть модуля, должны ли они быть размещены в их собственном модуле?
Это позволит решить вашу проблему доступности - теперь они являются публичными функциями в одном модуле, и вы можете легко использовать их из другого модуля, а не подвергать их как часть этого модуля.
Это общая хак, но эй ...
window.testing = {};
Затем в модуле:
module.exports = {
myPublicFunction: myPublicFunction
};
window.testing.myModule = {
myPublicFunction: myPublicFunction,
myPrivateFunction: myPrivateFunction
};
- 1. Как вы пишете единичный тест для функции, которая не экспортируется?
- 2. Тестирование функции, которая потребляет обещания
- 3. Тип функции, которая удаляет дубликаты в TypeScript
- 4. Тестирование функции, которая имеет вызов внутренней функции
- 5. Вызов функции, которая экспортируется в файл в ES6
- 6. Объявление функции в TypeScript, которая сама является результатом вызова функции?
- 7. Тестирование функции, которая срабатывает при сбое
- 8. Тестирование функции, которая имеет событие триггера
- 9. Модульное тестирование функции, которая возвращает указатель (C++)
- 10. Тестирование функции, которая содержит асинхронный код
- 11. Тестирование функции, которая хранит файл в Sharepoint
- 12. блока тестирование функции, которая заканчивается Обещание цепи
- 13. Нормализация базы данных, которая импортируется/экспортируется много
- 14. Модульное тестирование функции, которая запускает новый процесс
- 15. Тестирование функции, которая использует fmt.Scanf() в Go
- 16. Тестирование функции C, которая использует дескрипторы файлов
- 17. Тестирование функции, которая вычисляет возраст от dob
- 18. Тестирование классов TypeScript с Jasmine
- 19. Переменная окружения не экспортируется
- 20. TypeScript Class экспортируется как модуль UMD со строгим режимом
- 21. Единичное тестирование функции, которая не возвращает никакого значения
- 22. Значение экспортируется вместо переменной
- 23. Как выполнить тестирование функции, которая просто вызывает другие функции?
- 24. Нужно ли заботиться о вызове функции, которая не экспортируется из dll.
- 25. prototype.Function не экспортируется в node.js
- 26. TypeScript - тестирование одного класса в проекте Angular2
- 27. Тестирование трубки Angular2/TypeScript с жасмином
- 28. Тестирование модуля с использованием Jasmine и TypeScript
- 29. Тестирование функции области, которая называет обещание с Jasmine
- 30. Единичное тестирование функции javascript, которая неосознанно используется в другом месте
Я думаю, что это общее программирование; модульные тесты не должны фокусироваться на частных методах. Если у вас есть частные методы, которые не покрываются определенным использованием публичных методов, тогда просто избавляйтесь от них. Если они охвачены использованием общедоступных методов, используйте эти общедоступные методы. (Упрощенная точка зрения, но это идея) – Katana314
Как вы справляетесь с этими проблемами перед переключением на TypeScript? – Artem