Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Кузнецов Дмитрий
Как защитить свой ко
д
д
01
Как сло
✖ Дать джуниору доступ до репозитория
✖ Сменить окружение
✖ Сменить контент
✖ Не проработанные требования
✖ Противоречивые требования
мать код
02
I. Вёрстка
03
Иконка
05
Текст
Go!
07
Длинный текст
Поехали!
11
Многострочный текст
Нажмите чтобы
поехать!
Нажмите чтобы
поехать!
13
Текст-подсказка
Нажмите чтобы
поехать!
Это кнопка на которую
можно нажимать
17
Много букв
Одиннадцатиклас
сница
рентгеноэлектрокардиогра
фическая
19
Крестик
Одиннадцатикл
ассница
рентгеноэлектрокардиогра
фическая
23
Нет основного текста
рентгеноэлектрокардиогра
фическая
29
Всё починено?
31
Go! Поехали! Нажмите чтобы
поехать!
Нажмите чтобы
поехать!
Это кнопка на которую
можно нажимать
Одиннадцатикл
ассница
рентгеноэлектрокардиогра
фическая
Одиннадцатикл
ассница
рентгеноэлектрокардиогра
фическая
рентгеноэлектрокардиогра
фическая
37
А как надо?
41
Графеновая
вёрстка!
43
47
100% регрессия
Go! Поехали! Нажмите чтобы
поехать!
Нажмите чтобы
поехать!
Это кнопка на которую
можно нажимать
Одиннадцатик
лассница
рентгеноэлектрокарди
ографическая
Одиннадцати
классница
рентгеноэлектрокар
диографическая
рентгеноэлектрокар
диографическая
53
59
61
67
Защищаем вёрстку:
— Одиннадцатиклассница
— Многострочные тексты
— Пустые строки
— Совмещение макета с вёрсткой (pixel perfect)
— И всё это на одной html странице
71
II. +JavaScript
73
auth
79
А что если...
— Не заполнены поля
— Слишком короткий логин
— Слишком длинный логин
— Логин не существует
— Пароль не подходит
— Бэкенд не отвечает
— Пароль не подходит более 3 раз подряд
— Капча набрана неправильно
— Заполнить и нажать вход
— Следующий слайд пожалуйста
83
Ошибка авторизации
— А давайте
напишем DOM-тест!
89
DOM-тест
Сколько будет 2 + 2?
Будет 4
Действительно 4!
Запишите формулу Эйлера
--no-verify
Вы правы как никогда!
01.
02.
03.
01.
02.
03.
97
А что будет, если мыло занято и пароль
формально не подходит?
$('.login').val('existingName')
$('.pass').val('1')
$('.submit').click()
01.
02.
03.
101
Отвечает auth:
$('.pass').hasClass('error') === true
$('.errorMsg').length === 1
$('.errorMsg').text() === 'Ошибка'
01.
02.
03.
103
auth.takeResponce
107
Асинхронный колбек
$.ajax({
...
callback: function(data) {
auth.takeResponce(data);
}
});
01.
02.
03.
04.
05.
06.
109
...если бэкенд ответит, что пароль
неправильный?
$('.login').val('name')
$('.pass').val('123456')
$('.submit').click()
auth.takeResponce(errorData)
01.
02.
03.
04.
113
Отвечает auth:
$('.pass').hasClass('error') === true
$('.errorMsg').length === 1
$('.errorMsg').text() === errorData.msg
01.
02.
03.
127
...бэкент не отвечает 10 секунд?
var clock = sinon.useFakeTimers()
$('.login').val('name')
$('.pass').val('123456')
$('.submit').click()
clock.tick(10 * 1000)
01.
02.
03.
04.
05.
131
Отвечает auth:
$('.auth').hasClass('timeout') === true
$('.errorMsg').length === 1
$('.errorMsg').text() === 'Ваш интернет плох'
01.
02.
03.
137
$.ajax
139
...нажать на вход при формально правильных
данных?
sinon.spy($, 'ajax')
$('.login').val('name')
$('.pass').val('123456')
$('.submit').click()
01.
02.
03.
04.
149
DOM-тесты на
вёрстку
151
Горизонтальная резиновость
157
Вертикальная резиновость
163
Итого
— Проверка DOM элементов и атрибутов
— CSS классов и свойств
— Резиновости
— Таймаутов
— Слежение за методами
— Всё это мы не делаем!
167
Как сломать код
✓ Дать джуниору доступ до репозитория графеновая вёрстка
✓ Сменить окружение проверка резиновости
✓ Сменить контент электрокардиографическая одиннадцатиклассница
✓ Не проработанные требования прорабатываем
✓ Противоречивые требования невозможны
173
Как это работает у нас

Ctx

Resolve
 
Tests
 
Regression
 
push
 
hooks

179
Будь мужиком,
защити свой код!
181
Вопросы
191

More Related Content

Frontend