Уловки Vue (часть 9): сила тестирования моментальными снимками

Vue.js
Уловки Vue (часть 9): сила тестирования моментальными снимками

Специальная оговорка: эта статья является авторомAlex JoverОпубликовано вVueDoseряд выше.

Авторские права принадлежат автору.

Переводчик связался с автором перед переводом и получил разрешение на перевод всей серии.

Чтобы не мешать всеобщему прочтению, разрешенные записи будут размещены в конце этой статьи.

текст

Если вы находитесь в бета-версии, вы, вероятно, уже используетеJest: универсальная среда тестирования, созданная Facebook. Сейчас это один из самых популярных фреймворков для тестирования, и я использую его с самого начала.

Вы также можете использоватьEdd Yerburgразвитиеvue-test-utils, которая является официальной библиотекой утилит модульного тестирования, упрощающей наше тестирование.

Вот тестовый пример с использованием Jest и vue-test-utils:

it('has a message list of 3 elements', () => {
  const cmp = createCmp({ messages: ['msg-1', 'msg-2', 'msg-3'] })
  expect(cmp.is('ul')).toBe(true)
  expect(cmp.find('.message-list').isEmpty()).toBe(false)
  expect(cmp.find('.message-list').length).toBe(3)
})

it('has a message prop rendered as a data-message attribute', () => {
  const cmp = createCmp({ message: 'Cat' })
  expect(cmp.contains('.message')).toBe(true)
  expect(cmp.find('.message').props('message').toBe('Cat')
  expect(cmp.find('.message').attributes('data-message').toBe('Cat')

  // Change the prop message
  cmp.setProps({ message: 'Dog' })
  expect(cmp.find('.message').props('message').toBe('Dog')
  expect(cmp.find('.message').attributes('data-message').toBe('Dog')
})

Как показано выше,vue-test-utilsДает нам множество способов проверить реквизиты, классы, контент, поиск и т. д. Кроме того, он предоставляет нам методы для изменения свойств, напримерsetProps, это здорово.

Этот тестовый пример имеет очень явные утверждения:«найдите элемент с именем стиля« сообщение »и проверьте, имеет ли атрибут« сообщение данных »значение« кошка »».

Но если я скажу вам, что с тестированием моментальных снимков вам больше не нужно выполнять вышеуказанную работу.

По сути, вы можете использовать снимки, чтобы переписать предыдущий тестовый случай, следующим образом:

it("has a message list of 4 elements", () => {
  const cmp = createCmp({ messages: ["msg-1", "msg-2", "msg-3"] });
  expect(cmp.element).toMatchSnapshot();
});

it("has a message prop rendered as a data-message attribute", () => {
  const cmp = createCmp({ message: "Cat" });
  expect(cmp.element).toMatchSnapshot();

  cmp.setProps({ message: "Dog" });
  expect(cmp.element).toMatchSnapshot();
});

Результаты теста остаются прежними, и иногда вы можете найти больше контента в своем снимке.

Обратите внимание, что в этом тестовом случае я просто использовал выражение утвержденияtoMatchSnapshotметод, и ничего больше. Это упрощает и ускоряет модульное тестирование, поскольку нам больше не нужно проверять определенные свойства по отдельности.

Наряду с этим изменился и динамический характер модульного тестирования: вместо того, чтобы писать специальные выражения утверждений, мы можем установить компонент в любое желаемое состояние и сделать его снимок.

Снимок означает утверждениесостояние визуализации: они описывают, как компонент отображается при заданном состоянии, а затем делает снимок и проверяет его достоверность в сравнении.

Помните, что не нужно делать «снимок» ваших модульных тестов, чтобы решить, чего вы хотите, а решить, что вы хотите протестировать, чтобы не ставить телегу впереди лошади.

Я много выиграл от такого метода модульного тестирования. Но если вам нужно прочитать, понять, узнать больше, вы можете купить мою книгуTesting Vue.js Components with Jest. На прошлой неделе я добавил целую новую главу, посвященную тестированию снэпшотов, включая следующее:

  • Переосмыслите снимки
  • Зачем, как и когда использовать снимки
  • когда не использовать
  • образец кода

Пожалуйста, поделитесь со мной своими мыслями, вы можете найти их в твиттере.я.

Вы можете прочитать это онлайноригинальный, исходный код которого доступен для копирования и вставки. Если вам понравилась эта серия, поделитесь ею с коллегами!

Эпилог

Другие статьи из этой серии будут синхронизированы с выпуском официального сайта серии и будут своевременно переведены и опубликованы в Nuggets. Пожалуйста, продолжайте следить"Программа Обезьяны, дядя Хе", я верю, что принесу вам больше качественного контента, не забудьте поставить лайк~

Если вы хотите узнать больше о переводчике, проверьте следующее:

  • личный блог:blog.hadesz.com
  • Персональный репозиторий на гитхабе:github.com/hadeshe93
  • Личный публичный аккаунт WeChat: поиск «Дядя Он, программист»

Запросить запись авторизации перевода

请求翻译授权记录

微信公众号
Если вы считаете, что эта статья хороша, поделитесь ею с друзьями~