Jest — это фреймворк для тестирования JavaScript, созданный Facebook. Он имеет встроенные утилиты запуска тестов, оценщика тестов и утверждений. Это удивительный фреймворк для тестирования ваших приложений, будь он написан на React, Angular или Vue. В этой статье я объясню, что такое функция Снимок в Jest, и покажу интересный пример использования, который может упростить и ускорить ваше тестирование.

Что такое Снапшот?

Как следует из названия, это в основном снимок вывода, который вы хотите сравнить с течением времени и проверить, соответствует ли код ожиданиям. Например, допустим, вы написали компонент React, который отображает некоторый пользовательский интерфейс. Со временем над ним работают разные люди и меняют вывод пользовательского интерфейса. Это сохраняется в виде текста, как показано ниже, и простое сравнение текстовых выходных данных может сказать, дает ли код правильный вывод. Основной интерес этой функции состоит в том, чтобы сделать тестирование более простым и безболезненным, проверяя цели вашего приложения для отображения определенного пользовательского интерфейса и не беспокоясь о реализации.

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

Дело

Допустим, у вас есть файл конфигурации, экспортирующий различные значения, как показано ниже:

// config.js

export const APP_NAME = 'MY_APP';

export const APP_MAIN_ROUTE = 'app/main';

export const APP_USER_ROUTE = 'app/user';

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

// config.test.js

import * as constants from '<source-file-path>';

test('constants matches snapshot', () => {
  expect(constants).toMatchSnapshot();
});

При первом запуске он создаст файл моментального снимка, как показано ниже, и будет сравниваться с ним при последующих запусках.

// config.test.js.snap
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`constants matches snapshot 1`] = `
Object {
  "APP_NAME": "MY_APP",
  "APP_MAIN_ROUTE": "app/main",
  "APP_USER_ROUTE": "app/user",
}
`;

Если у вас есть очень большой вложенный объект (возможно, объект конфигурации), вы можете протестировать его с помощью снимка с помощью одной строки. Можно избежать большого количества кода, связанного с утверждением или реализацией. Обязательно попробуйте это и дайте мне знать ваши мысли в комментариях.

Большое спасибо за прочтение. Пожалуйста, дайте мне знать, как вы себя чувствовали, и если вы хотите услышать больше по какой-либо теме, не забудьте сообщить мне об этом в комментариях. Хорошего дня!