单元测试我没有写的功能

时间:2017-05-12 08:35:26

标签: unit-testing mocha sinon

所以我有这个功能

const firstEntityValue = (entities: Object, entity: string) => {
  const val = entities && entities[entity] &&
    Array.isArray(entities[entity]) &&
    entities[entity].length > 0 &&
    entities[entity][0].value
  ;
  if (!val) {
    return null;
  }
  return typeof val === 'object' ? val.value : val;
};

我没有写它,它是由我克隆的应用程序提供的。 该应用程序运行良好,但现在我正在编写单元测试,我不知道测试写入此函数甚至测试的内容。 我已经测试过使用mocha和sinon spy使用正确的参数调用函数一次,但istanbul告诉我所有这些都是在声明之后发生的" const firstEntityValue"不包括在内。 希望你能帮助我。

1 个答案:

答案 0 :(得分:1)

单元测试是关于测试行为,而不是实现

仅测试被调用的参数显然是一种不好的做法,因为您可以将测试与实现细节联系起来,并且您的测试不会突出显示代码的作用。如果您不知道此代码的作用,请将其删除,以便您了解应用所缺少的内容。

此代码可以按以下方式进行测试:

  • 如果匹配的实体没有值,则不应返回任何值。
  • 如果搜索到的实体不存在,则不应返回任何值。
  • 应返回匹配的第一个实体值。

你可以写一些更多的测试来证明函数的更多陈述,但这些主要的3个陈述足以弄清楚这种做法。

在测试标签中没有技术词汇是一件非常好的事情 您现在可以自由重构功能代码而无需更改测试;这显然是测试的目的。