代码错误-拆分字符串并返回每个单词JS的长度

时间:2019-12-11 18:58:24

标签: javascript arrays

function getWordLengths(str) {

return str.split(' ').map(words => words.length)
}

我的错误是

AssertionError: expected [ 0 ] to deeply equal []
  + expected - actual

  -[
  -  0
  -]
  +[]

t('returns [] when passed an empty string', () => {
  expect(getWordLengths('')).to.eql([]);
});
it('returns an array containing the length of a single word', () => {
  expect(getWordLengths('woooo')).to.eql([5]);
});
it('returns the lengths when passed multiple words', () => {
  expect(getWordLengths('hello world')).to.eql([5, 5]);
});

3 个答案:

答案 0 :(得分:0)

it("returns [] when passed an empty string", () => { expect(getWordLengths("")).to.eql([0]); });

.to.eql([0])不是([])

答案 1 :(得分:0)

您可以使用以下内容:

function getWordLengths(str) {
  return str.length > 0 ? str.split(' ').map(words => words.length) : [];
}

console.log( getWordLengths(""));
console.log( getWordLengths("Hi") );
console.log( getWordLengths("Hi there how are you") );

答案 2 :(得分:0)

str.split(' ')返回一个包含1个项目的数组,其长度为0。

"str".split(' ')  // ==>  [""].map(words => words.length) // ==> [0]

这就是为什么您的测试用例似乎失败了的原因。 str为空时,您将不得不调整测试用例或返回一个空数组。

expect(getWordLengths('')).to.eql([]);

expect(getWordLengths('')).to.eql([0]);

直接比较对象时,误报也有可能蔓延。由于每个对象都指向不同的引用。

[] === []{} === {}将返回false(我很确定测试库将对此进行解释,因为它们递归检查每个字段而不是对象引用)。我宁愿在测试案例中更加明确。

t('returns [0] when passed an empty string', () => {
  const computedArray = getWordLengths('');

  expect(computedArray.length).to.eql(1);

  expect(computedArray[1]).to.eql(0);
});