Как я могу стать лучше в TDD, если я новичок

#javascript #unit-testing #tdd

Вопрос:

Я пытаюсь научиться писать разработку, основанную на тестах, и хочу преуспеть в этом. В настоящее время я ищу некоторую практику в Google и нашел эту, но я не знаю, как пройти этот тест.

Вот тестовый код add-one.test.js :

 var addOne = require("./add-one.js");

test("Add 1 to each item in myArray", function () {
  var myArray = [31, 57, 12, 5];

  var unchanged = [31, 57, 12, 5];
  var expected = [32, 58, 13, 6];
  var output = addOne(myArray);

  expect(output).toEqual(expected);
  expect(myArray).toEqual(unchanged);
});
 

add-one.js:

 module.exports = function(numbers) {};
 

Комментарии:

1. return [32, 58, 13, 6] ?

2. Да. Я так думаю

Ответ №1:

Что обычно происходит в TDD, так это то, что мы выполняем работу в два этапа. Сначала мы доказываем, что наш тест работает (внося тривиальные изменения в тестируемого, который проходит тест), а затем мы очищаем тестируемого до тех пор, пока код не станет неудобным.

 return [32, 58, 13, 6]
 

Марк совершенно прав в том, что мы можем так легко пройти тест. Мы не будем вечно сохранять код в таком виде, но пока это дает нам отправную точку.

В некоторых случаях мы сначала внесем изменения в поведение за «защитным предложением», чтобы мы могли легко пройти, не нарушая никакого другого кода

    if numbers[0]== 31 amp;amp; ... amp;amp; numbers[3] == 5 {
      return [32, 58, 13, 6]
   }
 

Сделав это, мы сейчас находимся в ситуации, когда все наши тесты проходят. Поэтому наша цель-очистить код, не нарушая ни один из тестов.

«Удалить дублирование» — одна из тем изменений, которые мы вносим. В этом примере наблюдается большое дублирование между нашими входными и выходными данными.

 return [31   1, 57   1, 12   1, 5   1]
 
 return [numbers[0]   1, numbers[1]   1, numbers[2]   1, numbers[3] 1]
 
 return numbers.map(n => n 1)
 

Небольшие шаги, показанные здесь, просто для того, чтобы показать, как вы могли бы устранить дублирование в этом случае. Вам не нужно каждый раз использовать самые маленькие возможные шаги; иногда это полезный навык.

Переход прямо к форме с уже удаленным дублированием тоже в порядке вещей, если вы можете сразу его увидеть.

TDD-это просто ритуал для обеспечения того, чтобы ваш код находился под вашим контролем. На самом деле это не говорит вам, какие изменения в коде вы должны внести. Это происходит в результате практики дизайна (а также изучения того, какие функции языка/библиотеки доступны).