Ожидайте, что функция изменит, например, длину массива - PullRequest
0 голосов
/ 18 июня 2020

Вот типичный вариант использования. Мы хотим протестировать эту функцию removeItem.

// items.js
items = [/* .... */];
function removeItem(id) {
  // remove item with given id from `items`
}

Я хочу написать что-то вроде:

// test.js
expect(() => removeItem(7)).toChange(() => items.length);

Как мне написать это с помощью jest?

Другой пример того, что могло бы быть, в ruby у нас есть хороший API для этого:

# test.rb
expect { removeItem(7) }.to(change { items.length }.from(1).to(0))

РЕДАКТИРОВАТЬ: Я, конечно, знаю о следующем подходе, и я специально ищу что-то с меньшим дублированием.

// test.js
expect(items).toHaveLength(1);
removeItem(7);
expect(items).toHaveLength(0);

Ответы [ 2 ]

2 голосов
/ 18 июня 2020

Jest упрощает работу:

expect(items).toHaveLength(1);
removeItem(7);
expect(items).toHaveLength(0);

Можно реализовать toChange с настраиваемым сопоставителем .

0 голосов
/ 19 июня 2020

Предлагаю вам утверждать, что в массиве не должно быть объекта с id: 7. Таким образом, в случае неудачи теста у вас будет гораздо лучшее описание того, почему тест не прошел

пример:

test('should remove the item from array', () => {
  expect(items).not.toContainEqual(
    expect.objectContaining({
      id: 7
    })
  )
})

который в случае сбоя выдаст что-то вроде:

enter image description here

демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...