【问题标题】:How to make this removeMiddle test pass when just return 1 value仅返回 1 个值时如何使此 removeMiddle 测试通过
【发布时间】:2021-09-25 18:19:29
【问题描述】:

我正在尝试创建一个函数以使此测试通过

这是我的测试用例的以下代码:

var removeMiddle = require("./remove-middle");

test("Remove middle", function () {
  var words = ["mouse", "giraffe", "queen", "window", "bottle"];

  var expectedWords = ["mouse", "giraffe", "window", "bottle"];
  var expectedOutput = ["queen"];

  var output = removeMiddle(words);

  expect(output).toEqual(expectedOutput);
  expect(words).toEqual(expectedWords);
});

这是我创建的函数:

function removeMiddle(words) {
  let index = [];
  words.splice(2, 1);
  for (let i = 0; i < words.length; i++) {
    if (words[i] === "queen") {
      index.push(words[i]);
    }
  }

  return words;
}

module.exports = removeMiddle;

现在我的函数刚刚通过了第二个测试用例:expect(words).toEqual(expectedWords);

【问题讨论】:

    标签: javascript unit-testing testing tdd


    【解决方案1】:

    首先,您希望您的输出是删除的单词。但是您正在从removeWords 返回words 数组。您可能可以返回index

    另外,一旦你拼接了words 数组,queen 将不再是数组的一部分。所以你的 for 循环什么都不做, index 返回一个空数组。

    您可以像这样修改代码以获得预期的输出:

    function removeMiddle(words) {
      let index = [words[2]];
      words.splice(2, 1);
      return index;
    }
    

    但是现在您的代码有点硬编码,仅适用于固定长度的数组(5)。如果您想要更通用的解决方案,可以执行以下操作。

    function removeMiddle(words) {
     if(words.length == 0) return [];
      let index = [];
      let middleElements = [];
      if(words.length % 2 == 0){
       console.log(words[Math.floor(words.length/2)]);
        middleElements.push(words[Math.floor(words.length/2)]);
        words.splice(words.length/2,1);
       console.log(words[Math.floor(words.length/2)]);
        middleElements.push(words[Math.floor(words.length/2)]);
        words.splice(words.length/2,1);  
      }
      else{
       console.log(words.length/2);
        middleElements.push(words[Math.floor(words.length/2)]);
        words.splice(words.length/2,1);  
      }
      return middleElements;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多