Использование Matchers
Jest использует «matchers» для проверки значений различными способами. Этот документ представит некоторые часто используемые matchers. Полный список см. в expect документации API.
Общие Matchers
Самый простой способ проверить значение — это точное равенство.
test('two plus two is four', () => {
expect(2 + 2).toBe(4);
});
В этом коде expect(2 + 2) возвращает объект «ожидание». Обычно с этими объектами ожидания вы не делаете ничего, кроме вызова matchers на них. В этом коде .toBe(4) является matchers. При запуске Jest отслеживает все несоответствующие matchers, чтобы вывести понятные сообщения об ошибках.
toBe использует Object.is для проверки точного равенства. Если вы хотите проверить значение объекта, используйте toEqual:
test('object assignment', () => {
const data = {one: 1};
data['two'] = 2;
expect(data).toEqual({one: 1, two: 2});
});
toEqual рекурсивно проверяет каждое поле объекта или массива.
Вы также можете проверить обратное matchers:
test('adding positive numbers is not zero', () => {
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считает истинным -
toBeFalsyсоответствует всему, что операторifсчитает ложным
Например:
test('null', () => {
const n = null;
expect(n).toBeNull();
expect(n).toBeDefined();
expect(n).not.toBeUndefined();
expect(n).not.toBeTruthy();
expect(n).toBeFalsy();
});
test('zero', () => {
const z = 0;
expect(z).not.toBeNull();
expect(z).toBeDefined();
expect(z).not.toBeUndefined();
expect(z).not.toBeTruthy();
expect(z).toBeFalsy();
});
Вы должны использовать matchers, который наиболее точно соответствует тому, что вы хотите, чтобы делал ваш код.
Числа
Большинство способов сравнения чисел имеют эквиваленты matchers.
test('two plus two', () => {
const value = 2 + 2;
expect(value).toBeGreaterThan(3);
expect(value).toBeGreaterThanOrEqual(3.5);
expect(value).toBeLessThan(5);
expect(value).toBeLessThanOrEqual(4.5);
// toBe and toEqual are equivalent for numbers
expect(value).toBe(4);
expect(value).toEqual(4);
});
Для равенства чисел с плавающей запятой используйте toBeCloseTo вместо toEqual, потому что вы не хотите, чтобы тест зависел от небольшой ошибки округления.
test('adding floating point numbers', () => {
const value = 0.1 + 0.2;
//expect(value).toBe(0.3); This won't work because of rounding error
expect(value).toBeCloseTo(0.3); // This works.
});
Строки
Вы можете проверить строки на соответствие регулярным выражениям с помощью toMatch:
test('there is no I in team', () => {
expect('team').not.toMatch(/I/);
});
test('but there is a "stop" in Christoph', () => {
expect('Christoph').toMatch(/stop/);
});
Массивы и итерируемые объекты
Вы можете проверить, содержит ли массив или итерируемый объект определенный элемент, используя toContain:
const shoppingList = [
'diapers',
'kleenex',
'trash bags',
'paper towels',
'milk',
];
test('the shopping list has milk on it', () => {
expect(shoppingList).toContain('milk');
expect(new Set(shoppingList)).toContain('milk');
});
Исключения
Если вы хотите проверить, вызывает ли определенная функция ошибку при вызове, используйте toThrow.
function compileAndroidCode() {
throw new Error('you are using the wrong JDK');
}
test('compiling android goes as expected', () => {
expect(() => compileAndroidCode()).toThrow();
expect(() => compileAndroidCode()).toThrow(Error);
// You can also use the exact error message or a regexp
expect(() => compileAndroidCode()).toThrow('you are using the wrong JDK');
expect(() => compileAndroidCode()).toThrow(/JDK/);
});
Примечание: функция, которая вызывает исключение, должна вызываться внутри обертывающей функции, иначе утверждение
toThrowзавершится с ошибкой.
И многое другое
Это лишь малая часть. Полный список matchers см. в документации.
После того, как вы узнали о доступных matchers, хорошим следующим шагом является ознакомление с тем, как Jest позволяет тестировать асинхронный код.
© 2022 Facebook, Inc.
Licensed under the MIT License.
https://jestjs.io/docs/using-matchers