Используя чистую функцию (для каждого), чтобы изменить массив, провалив Jest - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь использовать чистую функцию, которая использует For Each, функция изменит входной массив, чтобы вернуть 'x'. Может кто-нибудь помочь мне объяснить, почему я получаю эту ошибку?

Функции:

let functions = {
    helper: (x) => {
        return x;
    },

    changeArray: (x) => {
        let arr1 = [x];
        arr1.forEach(functions.helper);
        return arr1[0];
    }
};

Тестовый файл:

test('For Each', () => {
    expect(syntax.changeArray(['hey', 'hi']).toBe(['x','x']));
})

Результат / Ошибка:

    TypeError: _syntax.default.changeArray is not a function

      73 | 
      74 | test('For Each', () => {
    > 75 |     expect(syntax.changeArray(['hey', 'hi']).toBe(['x','x']));
         |                   ^
      76 | })

ИЗМЕНЕНИЯ:

const syntax{    
    helper: (x) => x,

    changeArray: (arr) => {
        return arr.map(syntax.helper);
    }
}

ИСПЫТАТЕЛЬНЫЙ ФАЙЛ:

    test('For Each', () => {
       expect(syntax.changeArray(['hey', 'hi'])).toBe(['x','x']);
    })

РЕЗУЛЬТАТ:

    expect(received).toBe(expected) // Object.is equality

    - Expected
    + Received

      Array [
    -   "x",
    -   "x",
    +   "hey",
    +   "hi",
      ]

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Почему мы видим ссылки на functions и syntax, которые кажутся идентичными? Давайте придерживаться одного и удалим другое. Я буду использовать syntax здесь.

Вот определение syntax, которое должно решить ваши проблемы:

let syntax = {

  // This change to the "helper" function solves problem #1;
  // simply return the string 'x' regardless of the parameter
  helper: x => 'x',

  // This "changeArray" function return a new `Array` where
  // every item has been mapped using `syntax.helper` (which
  // will map every Array item to the string 'x'):
  changeArray: arr => arr.map(syntax.helper)

};

Исправьте ошибку logi c в вашем наборе тестов. Изменить:

expect(syntax.changeArray(['hey', 'hi']).toBe(['x','x']))

На:

expect(syntax.changeArray(['hey', 'hi'])).toBe(['x','x']);
0 голосов
/ 26 февраля 2020

Есть несколько проблем с этим

Основная из них, что такое syntax.changeArray? Ваша функция находится в functions.changeArray.

Когда вы запускаете функцию через Array.forEach, функция forEach буквально ничего не делает с возвращаемым значением. Я думаю, что вы хотите, чтобы это было Array.map

Кроме того, ваша вспомогательная функция возвращает x, а не 'x' - она ​​вернет все, что ей было дано, поэтому, если вы ДЕЙСТВИТЕЛЬНО передали эту вспомогательную функцию array.map , он просто вернет то же самое неизменное значение, которое вы ему отправите.

Этот фрагмент кода, возможно, даст вам представление о том, что вы должны делать.

function runMap(arr) {
  return arr.map(val => 'x');
}

var testArray = [1,2,3];
console.log(runMap(testArray));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...