我怎样才能在 TDD 方面做得更好,我是初学者

How can I get better at TDD im a beginner

我正在尝试学习如何编写测试驱动开发,并想精通它。我目前正在 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);
});

添加-one.js:

module.exports = function(numbers) {};

TDD 中通常发生的事情是我们分两步完成工作。首先,我们证明我们的测试是有效的(通过对通过测试的测试对象引入一个微不足道的改变)然后我们清理测试对象直到代码不尴尬。

return [32, 58, 13, 6]

Mark 说的很对,我们可以轻松通过测试。我们不会永远保持代码的那种形状,但现在它给了我们一个起点。

在某些情况下,我们会首先引入“保护条款”背后的行为变化,这样我们就可以在不破坏任何其他代码的情况下轻松通过

   if numbers[0]== 31 && ... && 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 只是确保您的代码在您的控制之下的一种仪式。它实际上并没有告诉您应该对代码进行哪些更改。这来自练习 设计(以及学习可用的 language/library 功能)。