В моем предыдущем посте Тесты классов компонентов Angular я рассказал, почему я предпочитаю писать свои модульные тесты Angular исключительно как тесты классов компонентов. В этом посте я хочу поделиться простой функцией, которую я использую для создания типизированных заглушек.
В моем предыдущем посте вы заметили, что мне пришлось привести свои зависимости к типу Typescript any
, чтобы внедрить их в конструктор. Вот этот пример снова:
Теперь я мог бы легко использовать реальный тип моей сервисной зависимости и просто заглушить все ее методы. Это достаточно просто, если ваша зависимость имеет только несколько свойств. Однако, если вы вводите что-то вроде Router
из Angular, у которого есть много методов и свойств, которые необходимо определить, эта стратегия может быстро стать громоздкой. Говоря языком чистого JavaScript, вам нужен всего лишь объект, у которого все свойства типа TypeScript, который вы пытаетесь имитировать, установлены в undefined
. Итак, именно это я и сделал, и вот результат:
Это простая функция, которая принимает партиал в качестве параметра и возвращает этот парциал, преобразованный в желаемый тип.
Вот пример из предыдущего поста с использованием функции stub
вместо приведения зависимости к типу any
.