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