Неделя 4

Начало недели было потрачено на изучение проблемы CORS с imjs библиотекой, но вскоре я сдался. Возможно, свежий взгляд на более позднем этапе может помочь в выявлении проблемы. Вскоре я перешел к моей следующей важной задаче в соответствии с графиком — разделение набора тестов imjs на интеграционные тесты, которые будут использоваться для тестирования сервиса, и модульные тесты, которые должны быть «независимыми» от ответа сервиса, однако должен пройти или не пройти исключительно в зависимости от того, как написано imjs. Это включает в себя две основные задачи:

  1. Убедитесь, что интеграционные тесты не запускаются, когда пользователь специально хочет запустить модульные тесты. Это связано с тем, что для интеграционных тестов требуется работающий экземпляр TestMine, а модульным тестам не требуется работающий экземпляр. Если интеграционные тесты выполняются в среде без запущенной службы, они завершатся ошибкой. Кроме того, в случае сбоя тестов будет невозможно различить, связано ли это с изменением службы или обновлением в imjs.
  2. Добавление макетов, когда функция полагается на ответ службы и манипулирует им. Мок-ответ должен быть таким, чтобы он работал с текущей версией библиотеки, и для этого я имитирую саму TestMine, так как все тесты проходят отлично.

В первой половине, чтобы определить, какие тесты запускать (интеграционные или модульные), я полагаюсь на то, что пользователь передаст переменную среды ( IMJS_TESTS=UNIT), если он хочет специально настроить макеты и запустить модульные тесты. Во всех остальных случаях интеграция тесты будут запущены, так как это текущее поведение, и его изменение может привести к поломке других конвейеров, частью которых является imjs.

Что касается второй части, я еще не придумал конкретный шаблон, который буду применять, но я полагаюсь на nock, который сделает всю тяжелую работу по насмешкам. Он предоставляет функции recorder и load, так что я могу легко смоделировать ответ, сохранить его в виде файла JSON и загрузить по требованию. Единственным недостатком этого подхода является то, что я не могу использовать функциональность persist, а это означает, что мне придется загружать ответ снова и снова, чтобы использовать его. Я проверил это на первом тесте, и кажется, что это хорошо. Загрузка ответов в хук beforeAll кажется правильным выбором. Я также создал несколько вспомогательных функций, которые помогут мне найти файл JSON, содержащий требуемый макет, на основе URL-адреса и метода запроса, указанного в качестве параметра.

Лакш Сингла