Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private void activeTasksCount() {
- $("#todo-count>strong").shouldHave(exactText(Integer.toString(tasks.filter(cssClass("active")).size())));
- }
- /*
- такая проверка - однозначный перебор
- причем - сразу по нескольким причинам
- первое
- мы сами - полностью контролируем тестовую ситуацию
- и знаем - сколько активных тасок должно быть в каждый момент времени в списке
- потому - мы в состоянии написать гораздо более простой код
- $("#todo-count>strong").shouldHave(exactText(Integer.toString(4)));
- ну или не 4, а какое-то другое конкретное значение, которое соответствует тестовой ситуации
- Если что-то можно сделать проще - надо так делать
- второе
- допустим, проверка $("#todo-count>strong").shouldHave(exactText(Integer.toString(tasks.filter(cssClass("active")).size())));
- падает с некой ошибкой
- вопрос - ты можешь быстро и точно определить - что неверно
- - значение в счетчике items left
- - количество тасок в списке (с классом active)?
- еще вопрос - как считаешь, могут такие вещи поломаться одновременно и по-разному?
- Мы, реализуя проверку состояния одних элементов, опираясь на состояние других элементов
- полагаем, что вот состояние других = верное
- а это может быть далеко не так
- Получается - что корректность этой нашей проверки зависит от правильности состояния списка тасок
- т е - наша проверка зависима от разных факторов
- третье
- имя метода- проверки - начинай с assert
- https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#bookmark=id.sswzyp7qkm9o
- если есть термины на UI, которые можно переиспользовать в названии -
- надо их переиспользовать
- т к это наиболее наглядный и понятный термин
- в данном случае - assertItemsLeft - будет наиболее корректно
- четвертое
- сравни
- assertItemsLeft()
- или
- assertItemsLeft(4)
- Во втором случае - гораздо понятнее, что мы проверяем и каковы наши ожидания
- глядя на вызов activeTasksCount() - очень тяжело догадаться только по названию метода
- что метод - это проверка
- что он проверяет состояние счетчика Items Left
- на какие значения рассчитывает эта проверка
- Это слишком не KISS, слишком зависимо и слишком неточно
- Я писала в прошлых ревью другое
- пересмотри их
- Да и следующие видео ты уже просмотрел и таких вопросов уже быть не должно
- Возможно - стоит еще раз пересмотреть видео
- И еще важый момент
- проверить этот счетчик Items Left - достаточно единожды в этом сценарии
- тоже было в прошлых ревью и обсуждениях
- и такая проверка - не заменяет проверки состояния списка тасок
- это - разные вещи, которые должны проверяться независимо друг от друга
- и состояние списка тасок - куда более важно
- */
- ******************************
- @Test
- public void testTasksLifeCycle() {
- open("https://todomvc4tasj.herokuapp.com/");
- add("task1");
- edit("task1", "task1 edited");
- toggle("task1 edited");
- activeTasksCount();
- /*
- тут нужна другая проверка
- проверка списка тасок
- assertTasks - подошла бы
- перечитай прошлые ревью
- насчет проверки - activeTasksCount(); - учти комментарии выше
- */
- filterActive();
- activeTasksCount();
- /*
- тут нужна проверка списка тасок
- проверка assertNoTasks();
- */
- add("task2");
- assertTasks("task2");
- /*
- без этой проверки можно обойтись
- видимая таска - одна
- и cancelEdit("task2"... - проверит операцию add("task2");
- */
- cancelEdit("task2", "task2 edited canceled");
- assertTasks("task2");
- /*
- а вот тут - верно, проверка нужна
- т к toggleAll(); - не проверит cancelEdit("task2"
- */
- toggleAll();
- assertNoTasks();
- filterCompleted();
- /*
- тут - нужна проверка
- ведь в этот момент в списке должны быть 2 видимые таски
- а это значит - что операция toggle("task2") не проверит состояние всего списка
- */
- toggle("task2");
- assertTasks("task1 edited");
- clearCompleted();
- /*
- нужна проверка
- следующая операция не является проверкой для предыдущей
- */
- filterAll();
- delete("task2");
- assertNoTasks();
- }
- /*
- с покрытием и со сценарием - уже все ок
- с проверками - еще нужно доразобраться и доделать
- */
- ***************************************************
- add
- startEdit
- edit
- assertTasks
- assertNoTasks
- toggle
- filterActive
- toggleAll
- cancelEdit
- activeTasksCount
- filterCompleted
- clearCompleted
- filterAll
- delete
- /*
- это - перечень вспомогательных методов в том порядке, который сейчас
- писала тебе про это в прошлых ревью
- в слеке - ничего не написал в защиту своего подхода, но и не прислушался к совету
- почему?
- ниже - то, как можно было бы упорядочить
- */
- add
- startEdit
- edit
- cancelEdit
- delete
- /*
- сначала - CRUD-операции
- связанные друг с другом методы - расположены рядом
- */
- toggle
- toggleAll
- clearCompleted
- /*
- дальше - остальные операции
- аналогично - однотипные операции расположены рядом
- */
- filterAll
- filterActive
- filterCompleted
- /*
- далее - операции переходов по фильтрам
- рядом и в порядке следования фильтров
- */
- assertTasks
- assertNoTasks
- activeTasksCount
- /*
- проверки
- тоже - рядом
- */
- /*
- конечно, это не единственный способ для упорядочивания
- конечно, технически это не имеет значения - ведь с любым порядком методов код будет работать
- вот только его понятность, наглядность - от порядка методов - зависит
- тоже - смотри прошлые ревью про это
- или обсуждай в слеке
- */
- **************************************
Advertisement
Add Comment
Please, Sign In to add comment