【问题标题】:How can I get better at TDD im a beginner作为初学者,我如何在 TDD 上做得更好
【发布时间】:2021-09-25 04:47:54
【问题描述】:

我正在尝试学习如何编写测试驱动的开发,并希望能够精通它。我目前正在谷歌上寻找一些练习并找到了这个,但我不知道如何让这个测试通过。

这里是测试代码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) {};

【问题讨论】:

  • return [32, 58, 13, 6]?
  • 是的。我想是的

标签: javascript unit-testing tdd


【解决方案1】:

在 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 只是一种确保您的代码在您的控制之下的仪式。它实际上并没有告诉您应该对代码进行哪些更改。这来自于实践设计(以及学习可用的语言/库功能)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-14
    • 2017-11-11
    • 2015-04-27
    • 2019-01-06
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 2023-02-21
    相关资源
    最近更新 更多