1 of 82

Make it easy.

Куликов Никита

Frontend-разработчик

Упрощаем написание тестов в Angular

@kulikovv_n

2 of 82

Немного обо мне

4 года во фронтенде

3 of 82

Немного обо мне

4 года во фронтенде�

4 года в провайдерах инфраструктуры

4 of 82

Немного обо мне

4 года во фронтенде�

4 года в провайдерах инфраструктуры�

2 года в Selectel

5 of 82

Немного обо мне

Занимаюсь интерфейсами сервисов хранения данных в Облаке Selectel

4 года во фронтенде, 2 из них в Selectel

6 of 82

Немного обо мне

Занимаюсь интерфейсами сервисов хранения данных в Облаке Selectel

4 года во фронтенде, 2 из них в Selectel

Не люблю, когда код ломается в неожиданных местах

7 of 82

О компании

Selectel

8 of 82

Более 40 готовых инфраструктурных решений

Выделенные серверы готовых

и произвольных конфигураций

Облачные серверы �с моментальным запуском

Серверы с GPU

Экспериментальное железо

Серверы и вычисления

Облачные базы данных

Объектное хранилище

Файловое хранилище

Managed Kubernetes �и Container Registry

Облачная платформа

Сеть доставки контента (CDN)

Балансировщики нагрузки

Selectel Connect и сети L3 VPN

Облачный DNS

Организация сети

Публичное облако

Частное облако

Удаленные рабочие столы (VDI)

Облако на базе VMware

ML-платформа

Платформа обработки данных

Data Science & Analytical

Virtual Machine

ML и обработка данных

Аттестованный сегмент ЦОД

Соответствие 152-ФЗ

Защита от DDoS и WAF

Безопасность

Единая панель управления �и система биллинга

Документация к API �и база знаний

Базовая защита от DDoS �по умолчанию

Техническая �поддержка 24/7

Система управления ролями (IAM)

9 of 82

Немного про

10 of 82

Angular и тестирование

  • Все приложение состоит из модулей
    • Дают информацию для компиляции приложения

11 of 82

Angular и тестирование

  • Все приложение состоит из модулей
    • Дают информацию для компиляции приложения
    • В них объявляются и импортируются другие Angular-сущности

12 of 82

Angular и тестирование

  • Все приложение состоит из модулей
    • Дают информацию для компиляции приложения
    • В них объявляются и импортируются другие Angular-сущности
    • Легкая и быстрая замена зависимостей во время тестирования

13 of 82

Angular и тестирование

Все приложение состоит из модулей

  • Реализовано Dependency Injection�
    • Внедрение через конструктор

14 of 82

Angular и тестирование

Все приложение состоит из модулей

  • Реализовано Dependency Injection�
    • Внедрение через конструктор
    • Информация о зависимостях берется из декораторов или модулей

15 of 82

Angular и тестирование

Все приложение состоит из модулей

Реализовано Dependency Injection

  • Готовый инструментарий

    • Jasmine и Karma - для написания и запуска тестов

16 of 82

Angular и тестирование

Все приложение состоит из модулей

Реализовано Dependency Injection

  • Готовый инструментарий

    • Jasmine и Karma – для написания и запуска тестов
    • TestBed – абстракция для unit-тестирования

17 of 82

Angular и тестирование

Все приложение состоит из модулей

Реализовано Dependency Injection

  • Готовый инструментарий

    • Jasmine и Karma – для написания и запуска тестов
    • TestBed – абстракция для unit-тестирования

Protractor – фреймворк для e2e тестирования от команды Angular

18 of 82

Angular и тестирование

Все приложение состоит из модулей

Реализовано Dependency Injection

  • Готовый инструментарий

    • Jasmine и Karma – для написания и запуска тестов
    • TestBed – абстракция для unit-тестирования

19 of 82

TestBed

20 of 82

TestBed

Управление конфигурацией

21 of 82

TestBed

Доступ к DOM-дереву тестируемого компонента

Управление конфигурацией

22 of 82

TestBed

Доступ к DOM-дереву тестируемого компонента

Управление конфигурацией

Доступ к инжектору зависимостей для работы с ними в тестовом runtime

23 of 82

TestBed не идеален

24 of 82

Конфигурация тестового набора

25 of 82

26 of 82

27 of 82

28 of 82

Постоянно растущая конфигурация тестового модуля

29 of 82

Постоянно растущая конфигурация тестового модуля

Захламление файла с тестами излишними декларациями моков

30 of 82

Высокий порог входа в API

31 of 82

32 of 82

33 of 82

34 of 82

Много ручной работы из-за недостатков API

35 of 82

36 of 82

37 of 82

Решаем все проблемы

38 of 82

Как решаем?

Вынести конфигурацию зависимостей в отдельные модули

39 of 82

Как решаем?

Вынести конфигурацию зависимостей в отдельные модули

Написать свои хелперы для повторяющихся участков

40 of 82

Как решаем?

Вынести конфигурацию зависимостей в отдельные модули

Написать свои хелперы для повторяющихся участков

Использовать сторонние библиотеки

41 of 82

42 of 82

< 1 МБ в несжатом виде

43 of 82

< 1 МБ в несжатом виде

≈ 100K загрузок в неделю

44 of 82

< 1 МБ в несжатом виде

≈ 100K загрузок в неделю

Активно поддерживается коммьюнити

45 of 82

46 of 82

47 of 82

48 of 82

49 of 82

50 of 82

51 of 82

52 of 82

53 of 82

54 of 82

55 of 82

56 of 82

57 of 82

58 of 82

DOM Testing Library

59 of 82

60 of 82

Spectator позволяет

  • Упростить конфигурацию TestBed

    • За счет фабрик, скрывающих boilerplate TestBed

61 of 82

Spectator позволяет

Упростить конфигурацию TestBed

  • Сделать API взаимодействия с тестовым окружением проще

    • Путем объединения и декорирования TestBed API в одном объекте, создаваемого фабрикой

62 of 82

Spectator позволяет

Упростить конфигурацию TestBed

Сделать API взаимодействия с тестовым окружением проще

  • Устранить недостатки работы с DOM

    • За счет применения DOM Testing Library

63 of 82

Что Spectator не решил

64 of 82

65 of 82

66 of 82

67 of 82

ng-mocks

68 of 82

ng-mocks

API для мока любых Angular-сущностей

69 of 82

ng-mocks

70 of 82

ng-mocks

71 of 82

ng-mocks

API для мока любых Angular-сущностей

Гибкая настройка заменяемых зависимостей

72 of 82

ng-mocks

73 of 82

ng-mocks

74 of 82

ng-mocks

75 of 82

ng-mocks

API для мока любых Angular-сущностей

Гибкая настройка заменяемых зависимостей

Глобальная настройка заменяемых зависимостей

76 of 82

Теперь мы можем

77 of 82

Теперь мы можем

Гибко управлять конфигурацией тестового набора – Spectator & ng-mocks

78 of 82

Теперь мы можем

Гибко управлять конфигурацией тестового набора – Spectator & ng-mocks

Использовать мощное и прозрачное API доступа к тестируемому компоненту – Spectator & DOM Testing Library

79 of 82

Теперь мы можем

Гибко управлять конфигурацией тестового набора – Spectator & ng-mocks

Использовать мощное и прозрачное API доступа к тестируемому компоненту – Spectator & DOM Testing Library

Управлять подменой зависимостей – ng-mocks

80 of 82

Остались вопросы?�Обращайтесь!

Куликов Никита

Frontend-разработчик

@kulikovv_n

selectel.ru��selectel

selectel

81 of 82

82 of 82