Using Matchers
Jest использует "вычислители" чтобы позволить вам тестировать значения различными способами. Для использования доступно слишком много вычислителей, чтобы их заучивать, так что данное руководство попытается представить наиболее полезные из них.
Общие вычислители #
Самый простой способ проверить значение — при помощи точно равенства.
test('два плюс два равно четыре', () => { expect(2 + 2).toBe(4); });
В этом коде expect(2+2)
возвращает объект "ожиданий". Обычно вам не придется делать с этими объектами ожиданий ничего кроме как вызывать их вычислители. В этом примере кода .toBe(4)
это вычислитель. При запуске, Jest отслеживает все провалившиеся вычислители для того, чтобы он мог напечатать для вас сообщения об ошибках.
toBe
использует ===
для проверки точного совпадения. Если вы хотите проверить значение объекта, то вместо этого используйте toEqual
:
test('присваивание объекту', () => { const data = {один: 1}; data['два'] = 2; expect(data).toEqual({один: 1, два: 2}); });
toEqual
рекурсивно проверяет каждое поле объекта или массива.
Вы также можете протестировать на противоположность вычислителю:
test('сложение положительных чисел не равно нулю', () => { for (let a = 1; a < 10; a++) { for (let b = 1; b < 10; b++) { expect(a + b).not.toBe(0); } } });
Правдивость #
В тестах иногда необходимо проводить различие между undefined
, null
и false
, но иногда не требуется проводить между ними различие. Jest содержит вспомогательные функции позволяющие явно указывать, что вам нужно.
toBeNull
соответствует толькоnull
toUndefined
соответствует толькоundefined
toBeDefined
является противоположностьюtoBeUndefined
toBeTruthy
соответствует всему, чтоif
инструкция рассматривает как truetoBeFalsy
соответствует всему, чтоif
инструкция рассматривает как false
Например:
test('null', () => { const n = null; expect(n).toBeNull(); expect(n).toBeDefined(); expect(n).not.toBeUndefined(); expect(n).not.toBeTruthy(); expect(n).toBeFalsy(); }); test('ноль', () => { const z = 0; expect(z).not.toBeNull(); expect(z).toBeDefined(); expect(z).not.toBeUndefined(); expect(z).not.toBeTruthy(); expect(z).toBeFalsy(); });
Следует использовать вычислитель, который наиболее точно отражает то, что код должен делать.
Числа #
Большинство способов сравнения чисел имеют эквивалентные вычислители.
test('два плюс два', () => { const value = 2 + 2; expect(value).toBeGreaterThan(3); expect(value).toBeGreaterThanOrEqual(3.5); expect(value).toBeLessThan(5); expect(value).toBeLessThanOrEqual(4.5); // toBe и toEqual эквивалентны по отношению к числам expect(value).toBe(4); expect(value).toEqual(4); });
Для проверки равенства чисел с плавающей запятой, используйте toBeCloseTo
вместо toEqual
потому, что вы не хотите, чтобы тест полагался на небольшую ошибку округления.
test('сложение чисел с плавающей запятой', () => { const value = 0.1 + 0.2; expect(value).not.toBe(0.3); // Корректно! Из-за ошибки округления expect(value).toBeCloseTo(0.3); // Корректно });
Строки #
Для сопоставления строк с регулярными выражениями, используйте toMatch
:
test('в команде нет места Я', () => { expect('команда').not.toMatch(/Я/); }); test('но есть "ася" в Васе', () => { expect('Вася').toMatch(/ася/); });
Массивы #
Для проверки того, что массив содержит конкретное значение, используйте toContain
:
const shoppingList = [ 'подгузники', 'клинекс', 'мешки для мусора', 'бумажные полотенца', 'пиво', ]; test('в списке покупок есть пиво', () => { expect(shoppingList).toContain('пиво'); });
Исключения #
Для проверки того, что конкретная функция возвращает ошибку при вызове, используйте toThrow
.
function compileAndroidCode() { throw new ConfigError('используется неверный JDK'); } test('компиляция android проходит как ожидается', () => { expect(compileAndroidCode).toThrow(); expect(compileAndroidCode).toThrow(ConfigError); // Также можно использовать тоже самое сообщение об ошибке или // или регулярное выражение expect(compileAndroidCode).toThrow('используется неверный JDK'); expect(compileAndroidCode).toThrow(/JDK/); });
И многое другое #
Это лишь проба пера. Для ознакомления с полным списком вычислителей, обратите внимание на справочную документацию.
После того как вы узнали о всех доступных вычислителях, хорошим следующим шагом будет взгляд на то, как Jest позволяет тестировать асинхронный код.