1

Наше веб-приложение имеет очень богатый интерфейс Javascript с большим количеством пользовательских виджетов, мастеров и т. Д. Мы смотрим на перенос некоторых из них (возможно, в конечном итоге все) для TypeScript в первую очередь для преимуществ более простого рефакторинга/уменьшения количества ошибок.Могу ли я использовать зависимости от обезьян-патчей при написании модульных тестов TypeScript

У нас есть модульные тесты JavaScript для виджетов/бизнес-логики на стороне клиента - которые мы запускаем через Карму. В настоящее время наши утверждения используют тестовую структуру YUI, но мы не особенно привязаны к этому.

Поскольку мы перемещаем базу кода в TypeScript, представляется разумным рассмотреть возможность записи некоторых из приборов в TypeScript (для тех же преимуществ). Также обратите внимание, что вывод JavaScript из нашего кода типа TypeScript не совсем дружелюбен, как наш ручной код JavaScript, поэтому это еще одна причина (захотеть написать тесты против TypeScript).

В настоящее время некоторые из наших модульных тестов будут «обезьяной патч» зависимости для опроса проверяемого кода. Например, мы можем заменить объект XmlHttpRequest браузера макетным объектом, чтобы мы могли рассуждать о том, как наш код взаимодействует с объектом real XmlHttpRequest.

В настоящее время мы это делаем, просто заменив зависимость на время испытания, например. window.XmlHttpRequest = MyMockObject;

У кого-нибудь есть мысли об этой практике, и, в частности, мысли о том, как достижение этого в TypeScript отличается от JavaScript?

Обратите внимание, что я не являюсь поклонником изменения нашего кода с единственной целью упростить модульный тест (например, требуя, чтобы зависимость всегда вводилась, а не предполагалась существующей).

ответ

1

Библиотека синонов (которая имеет привязки для TypeScript) делает это уже с особой поддержкой для подделки XMLHttpRequest (и таймеров). Использование этого, где это возможно, кажется лучшим вариантом.

Существует множество способов обойти проверку типов в TypeScript, например.

  • Присвоение значения типа любой (всегда разрешено)
  • Дать функцию JavaScript, чтобы сделать грязную работу за вас (и затем писать определение Машинопись для этой функции). Это в основном то, что происходит при использовании функции Sinon FakeXMLHttpRequest от машинописи
  • eval("foo = valueOfWrongType;");

 Смежные вопросы

  • Нет связанных вопросов^_^