Кузнецов Дмитрий
Как защитить свой ко
д
д
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

PDF
«Chef и Аnsible в инфраструктуре 2ГИС» — Артём Силенков, 2ГИС
PDF
Автоматизация UI-тестирования следующего поколения
PDF
Knockout.JS на примере 2ГИС-Онлайн
PPTX
Идеальное хранилище геоданных для вашего приложения
PPTX
Ancient egypt homework
DOC
Resume--Preston Fields
PDF
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
PPTX
S4 tarea4 logam
«Chef и Аnsible в инфраструктуре 2ГИС» — Артём Силенков, 2ГИС
Автоматизация UI-тестирования следующего поколения
Knockout.JS на примере 2ГИС-Онлайн
Идеальное хранилище геоданных для вашего приложения
Ancient egypt homework
Resume--Preston Fields
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
S4 tarea4 logam

Viewers also liked (11)

PPT
Health econ Chapter 1
PPTX
Ancient egypt homework
PDF
Лабиринт на Arduino, Вадим Ипполитов
PDF
Before the gym
PPTX
Ancient egypt homework
PDF
«Тестируем веб приложения», Павел Сташевский
PPTX
Isko product launch workshop
PPTX
2 lina-y-diego-nic1
PDF
Digitization of sales and marketing seminar in stockholm 17 october 2014
PPTX
Converse Case Study
PPTX
Nintendo Case Study
Health econ Chapter 1
Ancient egypt homework
Лабиринт на Arduino, Вадим Ипполитов
Before the gym
Ancient egypt homework
«Тестируем веб приложения», Павел Сташевский
Isko product launch workshop
2 lina-y-diego-nic1
Digitization of sales and marketing seminar in stockholm 17 october 2014
Converse Case Study
Nintendo Case Study
Ad

More from DevDay (20)

PDF
«Bdd и реактивщина в 2ГИС», Евгений Тютюев
PDF
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
PDF
«Я спросил у сервера...», Илья Пастушков
PDF
Фреймворк Slot, Good Parts, Александр Бирюков
PDF
Рендеринг может больше: vue.js vs React, Андрей Солодовников
PDF
Devops-практики в разработке решений для бизнеса, Максим Пашук
PDF
Inversion of Control в деталях, Дмитрий Кожевников
PDF
«Велогосипед», Данил Ильиных
PDF
«Процесс создания продукта», Максим Берёзкин
PDF
«Вывод продукта на новых территориях», Елизавета Алексеенко
PDF
Манипулятор на Ti Stellaris Launchpad, Лёша Романенко
PDF
«Хоба-хоба и в продакшн», Женя Пономарёв
PDF
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
PDF
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
PDF
«Открытая веб картография», Илья Таратухин
PDF
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
PDF
Матвей Мальков «Ещё один поиск контактов на Android»
PDF
Олег Годовых «Страх и ненависть в Event Bus»
PDF
Распределенные приложения и Azure Service Bus
PDF
Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»
«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Я спросил у сервера...», Илья Пастушков
Фреймворк Slot, Good Parts, Александр Бирюков
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Devops-практики в разработке решений для бизнеса, Максим Пашук
Inversion of Control в деталях, Дмитрий Кожевников
«Велогосипед», Данил Ильиных
«Процесс создания продукта», Максим Берёзкин
«Вывод продукта на новых территориях», Елизавета Алексеенко
Манипулятор на Ti Stellaris Launchpad, Лёша Романенко
«Хоба-хоба и в продакшн», Женя Пономарёв
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
«Открытая веб картография», Илья Таратухин
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
Матвей Мальков «Ещё один поиск контактов на Android»
Олег Годовых «Страх и ненависть в Event Bus»
Распределенные приложения и Azure Service Bus
Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»
Ad

Frontend