julia_v_iluhina

Untitled

Jul 22nd, 2016
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.22 KB | None | 0 0
  1. public class TodoMVCTest {
  2.  
  3.     @Test
  4.     public void testTaskLifeCycle() {
  5.  
  6.         open("https://todomvc4tasj.herokuapp.com/#/");
  7.  
  8.         add("1");
  9.         editTask("1", "1 edited");
  10.         /*
  11.             да, editTask("1"... - проверит add("1");
  12.             и потому между ними - не нужно проверки - editTask("1" - неявно проверит добавление
  13.  
  14.             а вот после editTask("1" - идет переход на другой фильтр...
  15.             и эта операция - уже не проверяет предыдущую
  16.             потому - после editTask("1" - нужна проверка
  17.         */
  18.  
  19.         switchTo("Active");
  20.         /*
  21.             Про этот момент - почитай  
  22.             https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#bookmark=id.8bflixemdgfw
  23.             это про то - как лучше реализовать методы переходов по фильтрам
  24.             попробуй применить
  25.  
  26.             после перехода на этот фильтр - да - у нас единственная таска
  27.             могу согласиться с тем, что cancelEdit("1 edited" - проверяет ее состояние
  28.             потому и проверки после перехода на эктив - не потребовалось)
  29.            
  30.             но...
  31.             было = в списке "1 edited"
  32.             перешли на эктив
  33.             стало = в списке "1 edited"
  34.             как узнать - это переход на эктив - работает правильно
  35.             или вообще не работает(ведь список вообще не изменился)
  36.  
  37.             чтобы проверить переход на другой фильтр точно
  38.             надо - чтобы было-стало отличались
  39.  
  40.             например, если еще на олле - закомплитить таску
  41.             то - было-стало будет разным
  42.  
  43.             было = "1 edited"
  44.             перешли на эктив
  45.             стало = пусто
  46.             т к состоняние списка разное и правильное при этом - все проверили
  47.  
  48.             обеспечь точную проверку перехода на эктив фильтр
  49.         */ 
  50.         cancelEdit("1 edited", "45");
  51.         toggle("1 edited");
  52.         /*
  53.             тут операция toggle("1 edited") - хорошо проверила cancelEdit
  54.             это ок
  55.            
  56.             а что проверяет операцию toggle("1 edited")?
  57.         */ 
  58.         add("2");
  59.         /*
  60.             а эту операцию что проверяет?
  61.         */
  62.         toggleAll();
  63.         assertNoVisibleTasks();
  64.         /*
  65.             тут - проверил)
  66.             это правильно)
  67.         */
  68.  
  69.         switchTo("Completed");
  70.         assertVisibleTasks("1 edited", "2");
  71.         /*
  72.             а тут видишь как удачно
  73.             было - пустой список
  74.             перешли на фильтр комплитед
  75.             стало = "1 edited", "2"
  76.             и закомпличивание проверили
  77.             и переход на фильтр)
  78.         */
  79.         reopen("1 edited");
  80.         /*
  81.             проверка?
  82.             про имя метода reopen - ниже напишу. чтоб пока не отвлекаться
  83.                
  84.             получается - что на этом фильтре мы только одну операцию проверили
  85.             а лучше - более равномерно во фильтрам распределить операции
  86.             это даст лучшие результаты для отлова такого рода проблем - когда
  87.             на одном из фильтров перестают нормально работать операции над тасками
  88.  
  89.             сюда безболезненно можно сместить clearCompleted
  90.  
  91.             не забывай проверки делать - сразу же после действия
  92.             если проверок недостаточно - можно или вообще пропустить ошибку
  93.             или при падении теста - долго угадывать - что есть причиной этого падения
  94.         */
  95.         switchTo("All");
  96.         /*
  97.             было - "2"
  98.             перешли на all
  99.             стало - "1 edited", "2"
  100.            
  101.             было-стало разные
  102.             это хорошо - хорошо проверили бы фильтеринг
  103.             да только вот проверок нету)
  104.            
  105.             следующая проверка - ведь не проверяет состояние списка тасок
  106.         */
  107.         assetItemsLeft("1 item left");
  108.         /*
  109.             не надо проверять всю фразу)
  110.             достаточно - проверить количество активных тасок
  111.             т к мы проверяем не UI, не формулировки
  112.             а логику
  113.             логика = счетчик показывает - столько-то(цифра) активных тасок
  114.             т е надо получить вот такой код
  115.             assetItemsLeft(1);
  116.         */
  117.  ***********************************************
  118.     private void toggle(String taskText) {
  119.         tasks.find(exactText(taskText)).$(".toggle").click();
  120.     }
  121.  
  122.     private void reopen(String taskText) {
  123.         tasks.find(exactText(taskText)).$(".toggle").doubleClick();
  124.     }
  125. /*
  126.     посмотри на эти 2 метода
  127.     код - один-в-один
  128.     не DRY)
  129.     это раз
  130.    
  131.     а самое главное - давай вызовем метод reopen для активной таски
  132.     она не переоткроется
  133.     а закомплитится
  134.     а метод  -reopen ...
  135.    
  136.     получается - что такое название метода reopen
  137.     не точно отражает - что мы делаем
  138.     т к еще и от контекста вызова все зависит
  139.    
  140.     кстати, а почему мы для прошлой работы - метод toggle назвали
  141.     а не complete? Попробуй вспомнить)
  142.  
  143.     вот это еще почитай
  144.     https://docs.google.com/document/d/13dNyFGbI7mV22UUhH8E0LJ7SzabAmX7Bw7VCHScYfiU/edit#bookmark=id.tmkuktenqqdi
  145. */
  146. ***************************************
  147.  
  148. private void assertTasksAre(String... taskTexts) {
  149. private void assertVisibleTasks(String... taskTexts) {
  150. private void assertNoTasks() {
  151. private void assertNoVisibleTasks() {
  152. /*
  153.     с реализацией  - все ок
  154.     не зря советовала расположить их рядом)
  155.    
  156.     смотри на названия
  157.     assertTasksAre и assertVisibleTasks
  158.     assertNoTasks и assertNoVisibleTasks
  159.    
  160.     подумай - что надо бы поправить)
  161. */
  162. ***********************************************************  
  163.  
  164.     private SelenideElement editTask(String oldTaskText, String newTaskText) {
  165.         tasks.find(exactText(oldTaskText)).doubleClick();
  166.         return tasks.find(cssClass("editing")).find(".edit").setValue("1 edited").pressEnter();
  167.     }
  168. /*
  169.     вопрос - а зачем возвращает этот метод результат типа SelenideElement?
  170.     как ты это используешь?
  171.     или как можно использовать?
  172.        
  173.     такое тебе задание на следующий раз)
  174.     используй в тесте такой вызов - editTask("1", "1 edited special for julia");
  175.     я так думаю - будет такая таска в списке - "1 edited special for julia"?
  176.  
  177. */
  178. ***************************************
  179.  
  180.     private SelenideElement cancelEdit(String taskText, String editText) {
  181.         tasks.find(exactText(taskText)).doubleClick();
  182.         return tasks.find(cssClass("editing")).find(".edit").setValue("45").pressEscape();
  183.     }
  184. /*
  185.     тут тоже мне расскажи - как ты собрался использовать результат типа SelenideElement
  186.    
  187.     и тоже - вызови метод вот так cancelEdit("1 edited special for julia", "1 edited special for julia CANCELED");
  188.     как тест будет бегать - обрати внимание - как текст таски меняется )
  189. */
  190. *******************************************************
  191.     private void switchTo(String taskTexts) {
  192.         $$("#filters li").find(exactText(taskTexts)).click();
  193.     }
  194. /*
  195.     оу
  196.     для перехода на такой-то фильтр - ты ждешь текстЫ тасок?
  197.     уверен - что параметр метода - назван верно?
  198.        
  199.     надеюсь, линка выше тебе помогла)
  200.     (при вызове switchTo("Active"); было)
  201.    
  202.     тут - на всякий случай еще намек - если еще не переделал
  203.    
  204.     что более KISS по-твоему и почему
  205.     switchToAll()  , switchToActive(),   switchToCompleted()
  206.     или
  207.     switchTo("All"), switchTo("Active"), switchTo("Completed")
  208.     ?
  209.        
  210.     если этого намека оказалось недостаточно и метод switchTo еще не переделал
  211.     попробуй вызвать свой метод switchTo("special for julia")
  212.     что получится?
  213.    
  214.     такая тебе загадка на подумать)
  215.  
  216.     еще  - почитай все в faq - про KISS & DRY принципы
  217.     может - еще что-то захватишь на эту тему
  218.     но то что в faq - обязательно
  219.     http://joxi.ru/n2YkKaGUjPgzyr
  220. */
  221. ***************************************************************
  222.     private void assetItemsLeft(String taskText) {
  223.         $("#todo-count").shouldHave(exactText(taskText));
  224.     }
  225. /*
  226.     удивительно)
  227.     и тут параметр метода = taskText
  228.     неужели текст таски метод как параметр принимает
  229.  
  230.     так
  231.     теперь подсказки
  232.     делаем метод с параметром - числом
  233.     т к проверяем - количество тасок
  234.     сверять будем - текст элемента
  235.     но не "#todo-count", а другого, в котором - только цифра
  236.     селектор для него ты уже знаешь - смотри слек
  237.  
  238.     с точки зрения страницы - и этот элемент - содержит текст
  239.     только это лишь "1" или "10"  = строка, содержащая только то, что нам надо проверить
  240.  
  241.     кондишен нам нужен точный - exactText
  242.     т к нам не подойдет сравнение по вхождению -слишком не точно
  243.     (смотри в слек - обсуждали)
  244.  
  245.     в качестве параметра - кондишен exactText принимает строковое значение
  246.     а у нас есть - числовое
  247.     значит - надо найти способ преобразования числа в строку
  248.     и полученную строку уже передать в exactText
  249.     чтоб найти такой способ
  250.     гугли что-то такое
  251.     java int to string
  252. */
Advertisement
Add Comment
Please, Sign In to add comment