Использование сопоставлений
Jest использует «cопоставления» для тестирования значений разными способами. На этой странице будут представлены сопоставления, которые чаще всего используются. Полный список смотрите в описании expect
API.
Стандартные сопоставления
Самый простой способ проверить значени е — при помощи точного равенства.
test('два плюс два равно четыре', () => {
expect(2 + 2).toBe(4);
});
В этом коде expect(2+2)
возвращает объект "ожиданий". Обычно вам не придется делать с этими объектами ожиданий ничего кроме как вызывать их вычислители. В этом примере кода .toBe(4)
это вычислитель. При запуске, Jest отслеживает все провалившиеся вычислители для того, чтобы он мог напечатать для вас сообщения об ошибках.
toBe
использует Object.is
для проверки точного совпадения. If you want to check the value of an object, use toEqual
:
test('присваивание объекту', () => {
const data = {один: 1};
data['два'] = 2;
expect(data).toEqual({один: 1, два: 2});
});
toEqual
рекурсивно проверяет каждое поле объекта или массива.
toEqual
ignores object keys with undefined
properties, undefined
array items, array sparseness, or object type mismatch. To take these into account use toStrictEqual
instead.
You can also test for the opposite of a matcher using not
:
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
toBeUndefined
соответствует только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).toBe(0.3); Это не будет работать из-за ошибки округления
expect(value).toBeCloseTo(0.3); // А это сработает.
});
Строки
Для сопоставления строк с регулярными выражениями, используйте toMatch
:
test('в команде нет места Я', () => {
expect('команда').not.toMatch(/Я/);
});
test('но есть "ася" в Васе', () => {
expect('Вася').toMatch(/ася/);
});