43
Кузнецов Дмитрий К а к з а щ и т и т ь с в ой код 01

Как защитить свой код

  • Upload
    2-

  • View
    2.058

  • Download
    2

Embed Size (px)

DESCRIPTION

Регрессивное тестирование особенно важно во фронтенд-приложениях, где велика связность сразу трёх технологий: HTML, CSS и JavaScript. Мы расскажем о юнит-тестах, которые проверяют часть приложения (блок, модуль и т.п.) по всем этим параметрам: размеры и другие CSS-свойства; наличие или отсутствие определённых элементов и их атрибутов; отработка кликов и других событий; и многое другое. Покажем примеры тестов, типичные ошибки и реальные баги.

Citation preview

Page 1: Как защитить свой код

Кузнецов Дмитрий

Как защитить свой код01

Page 2: Как защитить свой код

Как сло

✖ Дать джуниору доступ до репозитория

✖ Сменить окружение

✖ Сменить контент

✖ Не проработанные требования

✖ Противоречивые требования

мать код

02

Page 3: Как защитить свой код

I. Вёрстка

03

Page 4: Как защитить свой код

Иконка04

Page 5: Как защитить свой код

Текст

Go!05

Page 6: Как защитить свой код

Длинный текст

Поехали!

06

Page 7: Как защитить свой код

Многострочный текст

Нажмите чтобыпоехать!Нажмите чтобыпоехать!

07

Page 8: Как защитить свой код

Текст-подсказка

Нажмите чтобыпоехать!Это кнопка на которуюможно нажимать

08

Page 9: Как защитить свой код

Много букв

Одиннадцатиклассницарентгеноэлектрокардиографическая

09

Page 10: Как защитить свой код

Крестик

Одиннадцатиклассницарентгеноэлектрокардиографическая

10

Page 11: Как защитить свой код

Нет основного текста

рентгеноэлектрокардиографическая

11

Page 12: Как защитить свой код

Сколько мы

сломали?

12

Page 13: Как защитить свой код

Go! Поехали! Нажмите чтобыпоехать!

Нажмите чтобыпоехать!Это кнопка на которуюможно нажимать

Одиннадцатиклассницарентгеноэлектрокардиографическая

Одиннадцатиклассницарентгеноэлектрокардиографическая

рентгеноэлектрокардиографическая

13

Page 14: Как защитить свой код

А как надо?

14

Page 15: Как защитить свой код

Графеновая

вёрстка!

15

Page 16: Как защитить свой код

100% регрессия

Go! Поехали! Нажмите чтобыпоехать!

Нажмите чтобыпоехать!Это кнопка на которуюможно нажимать

Одиннадцатиклассницарентгеноэлектрокардиографическая

Одиннадцатиклассницарентгеноэлектрокардиографическая

рентгеноэлектрокардиографическая

16

Page 17: Как защитить свой код

17

Page 18: Как защитить свой код

18

Page 19: Как защитить свой код

19

Page 20: Как защитить свой код

Защищаем вёрстку:

— Одиннадцатиклассница

— Многострочные тексты

— Пустые строки

— Совмещение макета с вёрсткой (pixel perfect)

— И всё это на одной html странице

20

Page 21: Как защитить свой код

II. +JavaScript

21

Page 22: Как защитить свой код

auth22

Page 23: Как защитить свой код

А что если...

— Не заполнены поля

— Слишком короткий логин

— Слишком длинный логин

— Логин не существует

— Пароль не подходит

— Бэкенд не отвечает

— Пароль не подходит более 3 раз подряд

— Капча набрана неправильно

— Заполнить и нажать вход

— Следующий слайд пожалуйста

23

Page 24: Как защитить свой код

Ошибка авторизации

— А давайтенапишем DOM-тест!

24

Page 25: Как защитить свой код

DOM-тест

Сколько будет 2 + 2?

Будет 4

Действительно 4!

Что лучше, TypeScript или Dart?

Dart

Извините, вы нам не подходите.

01.

02.

03.

01.

02.

03.

25

Page 26: Как защитить свой код

А что будет, если мыло занято и парольформально не подходит?

$('.login').val('existingName')

$('.pass').val('1')

$('.submit').click()

01.

02.

03.

26

Page 27: Как защитить свой код

Отвечает auth:

$('.pass').hasClass('error') === true

$('.errorMsg').length === 1

$('.errorMsg').text() === 'Ошибка'

01.

02.

03.

27

Page 28: Как защитить свой код

auth.takeResponce

28

Page 29: Как защитить свой код

...если бэкенд ответит, что парольнеправильный?

$('.login').val('name')

$('.pass').val('123456')

$('.submit').click()

auth.takeResponce(errorData)

01.

02.

03.

04.

29

Page 30: Как защитить свой код

Отвечает auth:

$('.pass').hasClass('error') === true

$('.errorMsg').length === 1

$('.errorMsg').text() === errorData.msg

01.

02.

03.

30

Page 31: Как защитить свой код

...бэкент не отвечает 10 секунд?

var clock = sinon.useFakeTimers()

$('.login').val('name')

$('.pass').val('123456')

$('.submit').click()

clock.tick(10 * 1000)

01.

02.

03.

04.

05.

31

Page 32: Как защитить свой код

Отвечает auth:

$('.auth').hasClass('timeout') === true

$('.errorMsg').length === 1

$('.errorMsg').text() === 'Ваш интернет плох'

01.

02.

03.

32

Page 33: Как защитить свой код

$.ajax

33

Page 34: Как защитить свой код

...нажать на вход при формально правильныхданных?

sinon.spy($, 'ajax')

$('.login').val('name')

$('.pass').val('123456')

$('.submit').click()

01.

02.

03.

04.

34

Page 35: Как защитить свой код

Отвечает auth:

$.ajax.called === true

35

Page 36: Как защитить свой код

DOM-тесты на

вёрстку

36

Page 37: Как защитить свой код

Горизонтальная резиновость37

Page 38: Как защитить свой код

Вертикальная резиновость38

Page 39: Как защитить свой код

Итого

— Проверка DOM элементов и атрибутов

— CSS классов и свойств

— Резиновости

— Таймаутов

— Слежение за методами

— Всё это мы не делаем!

39

Page 40: Как защитить свой код

Как сломать код

✓ Дать джуниору доступ до репозитория графеновая вёрстка

✓ Сменить окружение проверка резиновости

✓ Сменить контент электрокардиографическая одиннадцатиклассница

✓ Не проработанные требования прорабатываем

✓ Противоречивые требования невозможны

40

Page 41: Как защитить свой код

Как это работает у нас

— Проработка контекста

— Решение задачи

— Написание тесткейсов и тестов

— Регрессия вёрстки

— git push -> хук с тестами

41

Page 42: Как защитить свой код

Будь мужиком,

защити свой код!

42

Page 43: Как защитить свой код

Вопросы

43