Проблема с тестом Mocha при попытке использовать ‘return’ в функции

#javascript #node.js #mocha.js

#javascript #node.js #mocha.js

Вопрос:

Я изучаю тест Mocha для js, но столкнулся со странной проблемой и не смог разобраться. Любой крупный человек может мне помочь:

Я делаю этот тестовый пример:

 it("remove all the number larger than 10", () => {
      function filter(arr) {
        return arr.filter(number => number < 11);
      }

      assert.equal(filter([1, 3, 3, 5, 10, 29, 3], [1, 3, 3, 5, 10, 3]));
    });
  

Но он возвращает undefined для этой функции фильтра, но когда я удаляю ключевое слово return, оно работает нормально:

 it("remove all the number larger than 10", () => {
      function filter(arr) {
        arr.filter(number => number < 11);
      }

      assert.equal(filter([1, 3, 3, 5, 10, 29, 3], [1, 3, 3, 5, 10, 3]));
    });
  

Кто-нибудь может мне это объяснить?
Спасибо

Ответ №1:

У вас опечатка, ваш close paren ) для filter должен быть сразу после первого массива, а не после обоих массивов.

Кроме того, для сравнения массивов используйте assert.deepEqual вместо assert.equal :

 it("remove all the number larger than 10", () => {
  function filter(arr) {
    return arr.filter(number => number < 11);
  }

  assert.deepEqual(filter([1, 3, 3, 5, 10, 29, 3]), [1, 3, 3, 5, 10, 3]);  // SUCCESS
});
  

(Причина, по которой он проходил, когда вы удалили return ключевое слово, заключается в том, что filter передавались оба массива, а затем возвращался undefined . assert.equal вызывался только с одним аргументом, поэтому его второй аргумент был неявным undefined . Поскольку undefined == undefined ваш тест пройден.)