GenericAssertions
Класс GenericAssertions предоставляет методы проверки, которые могут использоваться для утверждений о любых значениях в тестах. Новый экземпляр GenericAssertions создается путем вызова expect():
import { test, expect } from '@playwright/test';
test('assert a value', async ({ page }) => {
const value = 1;
expect(value).toBe(2);
}); Методы
any
expect.any() соответствует любому экземпляру объекта, созданному из конструктора или соответствующему примитивному типу. Используйте его внутри expect(value).toEqual() для выполнения сопоставления шаблонов.
Использование
// Match instance of a class.
class Example {}
expect(new Example()).toEqual(expect.any(Example));
// Match any number.
expect({ prop: 1 }).toEqual({ prop: expect.any(Number) });
// Match any string.
expect('abc').toEqual(expect.any(String)); Аргументы
-
constructorФункцияКонструктор ожидаемого объекта, например,
ExampleClass, или примитивный упакованный тип, например,Number.
anything
expect.anything() соответствует всему, кроме null и undefined. Используйте его внутри expect(value).toEqual() для выполнения сопоставления шаблонов.
Использование
const value = { prop: 1 };
expect(value).toEqual({ prop: expect.anything() });
expect(value).not.toEqual({ otherProp: expect.anything() }); arrayContaining
expect.arrayContaining() соответствует массиву, который содержит все элементы в ожидаемом массиве в любом порядке. Обратите внимание, что полученный массив может быть супермножеством ожидаемого массива и содержать дополнительные элементы.
Используйте этот метод внутри expect(value).toEqual() для выполнения сопоставления шаблонов.
Использование
expect([1, 2, 3]).toEqual(expect.arrayContaining([3, 1])); expect([1, 2, 3]).not.toEqual(expect.arrayContaining([1, 4]));
Аргументы
closeTo
Сравнивает числа с плавающей точкой для приблизительного равенства. Используйте этот метод внутри expect(value).toEqual() для выполнения сопоставления шаблонов. При сравнении только двух чисел предпочтительнее использовать expect(value).toBeCloseTo().
Использование
expect({ prop: 0.1 + 0.2 }).not.toEqual({ prop: 0.3 });
expect({ prop: 0.1 + 0.2 }).toEqual({ prop: expect.closeTo(0.3, 5) }); Аргументы
-
expectedчислоОжидаемое значение.
-
numDigitsчисло (необязательно)Количество десятичных знаков после запятой, которые должны быть равны.
objectContaining
expect.objectContaining() соответствует объекту, содержащему и соответствующему всем свойствам в ожидаемом объекте. Обратите внимание, что полученный объект может быть надмножеством ожидаемого объекта и содержать дополнительные свойства.
Используйте этот метод внутри expect(value).toEqual() для выполнения сопоставления шаблонов. Свойства объекта могут быть проверяемыми для дальнейшего ослабления ожиданий. Смотрите примеры.
Использование
// Assert some of the properties.
expect({ foo: 1, bar: 2 }).toEqual(expect.objectContaining({ foo: 1 }));
// Matchers can be used on the properties as well.
expect({ foo: 1, bar: 2 }).toEqual(expect.objectContaining({ bar: expect.any(Number) }));
// Complex matching of sub-properties.
expect({
list: [1, 2, 3],
obj: { prop: 'Hello world!', another: 'some other value' },
extra: 'extra',
}).toEqual(expect.objectContaining({
list: expect.arrayContaining([2, 3]),
obj: expect.objectContaining({ prop: expect.stringContaining('Hello') }),
})); Аргументы
-
expectedОбъектОжидаемый шаблон объекта, который содержит подмножество свойств.
stringContaining
expect.stringContaining() соответствует строке, содержащей ожидаемую подстроку. Используйте этот метод внутри expect(value).toEqual() для выполнения сопоставления шаблонов.
Использование
expect('Hello world!').toEqual(expect.stringContaining('Hello')); Аргументы
-
expectedстрокаОжидаемая подстрока.
stringMatching
expect.stringMatching() соответствует полученной строке, которая, в свою очередь, соответствует ожидаемому шаблону. Используйте этот метод внутри expect(value).toEqual() для выполнения сопоставления шаблонов.
Использование
expect('123ms').toEqual(expect.stringMatching(/\d+m?s/));
// Inside another matcher.
expect({
status: 'passed',
time: '123ms',
}).toEqual({
status: expect.stringMatching(/passed|failed/),
time: expect.stringMatching(/\d+m?s/),
}); Аргументы
toBe
Сравнивает значение с ожидаемым путем вызова Object.is. Этот метод сравнивает объекты по ссылке вместо их содержимого, аналогично оператору строгого равенства ===.
Использование
const value = { prop: 1 };
expect(value).toBe(value);
expect(value).not.toBe({});
expect(value.prop).toBe(1); Аргументы
-
expectedОбъектОжидаемое значение.
toBeCloseTo
Сравнивает числа с плавающей точкой для приблизительного равенства. Используйте этот метод вместо expect(value).toBe() при сравнении чисел с плавающей точкой.
Использование
expect(0.1 + 0.2).not.toBe(0.3); expect(0.1 + 0.2).toBeCloseTo(0.3, 5);
Аргументы
-
expectedчислоОжидаемое значение.
-
numDigitsчисло (необязательно)Количество десятичных знаков после запятой, которые должны быть равны.
toBeDefined
Убедитесь, что значение не undefined.
Использование
const value = null; expect(value).toBeDefined();
toBeFalsy
Убедитесь, что значение ложно в контексте булевых значений, одно из false, 0, '', null, undefined или NaN. Используйте этот метод, когда не важны конкретные значения.
Использование
const value = null; expect(value).toBeFalsy();
toBeGreaterThan
Убедитесь, что value > expected для числовых или больших целочисленных значений.
Использование
const value = 42; expect(value).toBeGreaterThan(1);
Аргументы
-
expectedчисло | [bigint]Значение для сравнения.
toBeGreaterThanOrEqual
Убедитесь, что value >= expected для числовых или больших целочисленных значений.
Использование
const value = 42; expect(value).toBeGreaterThanOrEqual(42);
Аргументы
-
expectedчисло | [bigint]Значение для сравнения.
toBeInstanceOf
Убедитесь, что значение является экземпляром класса. Используется оператор instanceof.
Использование
expect(page).toBeInstanceOf(Page);
class Example {}
expect(new Example()).toBeInstanceOf(Example); Аргументы
-
expectedФункцияКласс или конструкторская функция.
toBeLessThan
Убедитесь, что value < expected для числовых или больших целочисленных значений.
Использование
const value = 42; expect(value).toBeLessThan(100);
Аргументы
-
expectedчисло | [bigint]Значение для сравнения.
toBeLessThanOrEqual
Обеспечивает, что value <= expected для числовых или больших целочисленных значений.
Использование
const value = 42; expect(value).toBeLessThanOrEqual(42);
Аргументы
-
expectedчисло | [bigint]Значение для сравнения.
toBeNaN
Обеспечивает, что значение является NaN.
Использование
const value = NaN; expect(value).toBeNaN();
toBeNull
Обеспечивает, что значение является null.
Использование
const value = null; expect(value).toBeNull();
toBeTruthy
Обеспечивает, что значение истинно в контексте булевой переменной, кроме false, 0, '', null, undefined или NaN. Используйте этот метод, когда вам неважно конкретное значение.
Использование
const value = { example: 'value' };
expect(value).toBeTruthy(); toBeUndefined
Обеспечивает, что значение является undefined.
Использование
const value = undefined; expect(value).toBeUndefined();
toContain(expected)
Обеспечивает, что строковое значение содержит ожидаемую подстроку. Сравнение чувствительно к регистру.
Использование
const value = 'Hello, World';
expect(value).toContain('World');
expect(value).toContain(','); Аргументы
-
expectedстрокаОжидаемая подстрока.
toContain(expected)
Обеспечивает, что значение является Array или Set и содержит ожидаемый элемент.
Использование
const value = [1, 2, 3]; expect(value).toContain(2); expect(new Set(value)).toContain(2);
Аргументы
-
expectedОбъектОжидаемое значение в коллекции.
toContainEqual
Обеспечивает, что значение является Array или Set и содержит элемент, равный ожидаемому.
Для объектов этот метод рекурсивно проверяет равенство всех полей, а не сравнивает объекты по ссылке, как выполняет expect(value).toContain().
Для примитивных значений этот метод эквивалентен expect(value).toContain().
Использование
const value = [
{ example: 1 },
{ another: 2 },
{ more: 3 },
];
expect(value).toContainEqual({ another: 2 });
expect(new Set(value)).toContainEqual({ another: 2 }); Аргументы
-
expectedОбъектОжидаемое значение в коллекции.
toEqual
Сравнивает содержимое значения с содержимым ожидаемого значения, выполняя проверку «глубокого равенства».
Для объектов этот метод рекурсивно проверяет равенство всех полей, а не сравнивает объекты по ссылке, как выполняет expect(value).toBe().
Для примитивных значений этот метод эквивалентен expect(value).toBe().
Использование
const value = { prop: 1 };
expect(value).toEqual({ prop: 1 }); Нестрогое равенство
expect(value).toEqual() выполняет проверку глубокого равенства, сравнивая содержимое полученного и ожидаемого значений. Чтобы убедиться, что два объекта ссылаются на один и тот же экземпляр, используйте expect(value).toBe().
expect(value).toEqual() игнорирует undefined свойства и элементы массивов, и не требует, чтобы типы объектов были одинаковыми. Для более строгого соответствия используйте expect(value).toStrictEqual().
Сопоставление шаблонов
expect(value).toEqual() также можно использовать для сопоставления шаблонов объектов, массивов и примитивных типов с помощью следующих матчеров:
- expect(value).any()
- expect(value).anything()
- expect(value).arrayContaining()
- expect(value).closeTo()
- expect(value).objectContaining()
- expect(value).stringContaining()
- expect(value).stringMatching()
Вот пример, который утверждает некоторые значения внутри сложного объекта:
expect({
list: [1, 2, 3],
obj: { prop: 'Hello world!', another: 'some other value' },
extra: 'extra',
}).toEqual(expect.objectContaining({
list: expect.arrayContaining([2, 3]),
obj: expect.objectContaining({ prop: expect.stringContaining('Hello') }),
})); Аргументы
-
expectedОбъектОжидаемое значение.
toHaveLength
Обеспечивает, что значение имеет свойство .length равное ожидаемому. Полезно для массивов и строк.
Использование
expect('Hello, World').toHaveLength(12);
expect([1, 2, 3]).toHaveLength(3); Аргументы
-
expectedчислоОжидаемая длина.
toHaveProperty
Обеспечивает, что свойство по указанному keyPath существует в объекте и, при необходимости, проверяет, что свойство равно ожидаемому. Равенство проверяется рекурсивно, аналогично expect(value).toEqual().
Использование
const value = {
a: {
b: [42],
},
c: true,
};
expect(value).toHaveProperty('a.b');
expect(value).toHaveProperty('a.b', [42]);
expect(value).toHaveProperty('a.b[0]', 42);
expect(value).toHaveProperty('c');
expect(value).toHaveProperty('c', true); Аргументы
-
keyPathстрокаПуть к свойству. Используйте нотацию с точкой
a.bдля проверки вложенных свойств и индексированнуюa[2]нотацию для проверки вложенных элементов массива. -
expectedОбъект (необязательно)Необязательное ожидаемое значение для сравнения со свойством.
toMatch
Обеспечивает, что строковое значение соответствует регулярному выражению.
Использование
const value = 'Is 42 enough?'; expect(value).toMatch(/Is \d+ enough/);
Аргументы
toMatchObject
Сравнивает содержимое значения с содержимым ожидаемого значения, выполняя проверку «глубокого равенства». Разрешает наличие дополнительных свойств в значении, в отличие от expect(value).toEqual(), так что вы можете проверить только подмножество свойств объекта.
При сравнении массивов количество элементов должно совпадать, и каждый элемент проверяется рекурсивно.
Использование
const value = {
a: 1,
b: 2,
c: true,
};
expect(value).toMatchObject({ a: 1, c: true });
expect(value).toMatchObject({ b: 2, c: true });
expect([{ a: 1, b: 2 }]).toMatchObject([{ a: 1 }]); Аргументы
toStrictEqual
Сравнивает содержимое значения с содержимым ожидаемого значения и их типы.
Отличия от expect(value).toEqual():
- Проверяются ключи с неопределёнными свойствами. Например,
{ a: undefined, b: 2 }не совпадает с{ b: 2 }. - Проверяется разреженность массивов. Например,
[, 1]не совпадает с[undefined, 1]. - Проверяются типы объектов на равенство. Например, экземпляр класса со свойствами
aиbне будет равен литеральному объекту со свойствамиaиb.
Использование
const value = { prop: 1 };
expect(value).toStrictEqual({ prop: 1 }); Аргументы
-
expectedОбъектОжидаемое значение.
toThrow
Вызывает функцию и проверяет, что она бросает ошибку.
Необязательно сравнивает ошибку с ожидаемой. Разрешенные ожидаемые значения:
- Регулярное выражение — сообщение об ошибке должно соответствовать шаблону.
- Строка — сообщение об ошибке должно содержать подстроку.
- Объект Error — сообщение об ошибке должно быть равно свойству message объекта.
- Класс Error — объект ошибки должен быть экземпляром класса.
Использование
expect(() => {
throw new Error('Something bad');
}).toThrow();
expect(() => {
throw new Error('Something bad');
}).toThrow(/something/);
expect(() => {
throw new Error('Something bad');
}).toThrow(Error); Аргументы
-
expectedОбъект (необязательно)Ожидаемое сообщение об ошибке или объект ошибки.
toThrowError
Псевдоним для expect(value).toThrow().
Использование
expect(() => {
throw new Error('Something bad');
}).toThrowError(); Аргументы
-
expectedОбъект (необязательно)Ожидаемое сообщение об ошибке или объект ошибки.
Свойства
not
Делает проверку на противоположное условие. Например, следующий код проходит:
const value = 1; expect(value).not.toBe(2);
Использование
expect(value).not
Тип
© 2024 Microsoft
Licensed under the Apache License, Version 2.0.
https://playwright.dev/docs/api/class-genericassertions