GenericAssertions
Класс [GenericAssertions] предоставляет методы утверждений, которые могут быть использованы для проверки любых значений в тестах. Новый экземпляр [GenericAssertions] создается вызовом expect():
import { test, expect } from '@playwright/test';
test('assert a value', async ({ page }) => {
const value = 1;
expect(value).toBe(2);
});
Методы
any
Добавлено в: v1.9expect.any()
соответствует любому экземпляру объекта, созданному из constructor или соответствующего примитивного типа. Используйте его внутри expect(value).toEqual() для выполнения сопоставления с шаблоном.
Использование
// Соответствие экземпляру класса.
class Example {}
expect(new Example()).toEqual(expect.any(Example));
// Соответствие любому числу.
expect({ prop: 1 }).toEqual({ prop: expect.any(Number) });
// Соответствие любой строке.
expect('abc').toEqual(expect.any(String));
Аргументы
-
constructor
[Function]#Конструктор ожидаемого объекта, например,
ExampleClass
, или примитивный тип, такой какNumber
.
anything
Добавлено в: v1.9expect.anything()
соответствует всему, кроме null
и undefined
. Используйте его внутри expect(value).toEqual() для выполнения сопоставления с шаблоном.
Использование
const value = { prop: 1 };
expect(value).toEqual({ prop: expect.anything() });
expect(value).not.toEqual({ otherProp: expect.anything() });
arrayContaining
Добавлено в: v1.9expect.arrayContaining()
соответствует массиву, который содержит все элементы ожидаемого массива в любом порядке. Обратите внимание, что полученный массив может быть надмножеством ожидаемого массива и содержать дополнительные элементы.
Используйте этот метод внутри expect(value).toEqual() для выполнения сопоставления с шаблоном.
Использование
expect([1, 2, 3]).toEqual(expect.arrayContaining([3, 1]));
expect([1, 2, 3]).not.toEqual(expect.arrayContaining([1, 4]));
Аргументы
-
expected
[Array]<[Object]>#Ожидаемый массив, который является подмножеством полученного значения.
closeTo
Добавлено в: v1.9Сравнивает числа с плавающей запятой для приблизительного равенства. Используйте этот метод внутри 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
[number]#Ожидаемое значение.
-
numDigits
[number] (опционально)#Количество десятичных знаков после запятой, которые должны совпадать.
objectContaining
Добавлено в: v1.9expect.objectContaining()
соответствует объекту, который содержит и соответствует всем свойствам ожидаемого объекта. Обратите внимание, что полученный объект может быть надмножеством ожидаемого объекта и содержать дополнительные свойства.
Используйте этот метод внутри expect(value).toEqual() для выполнения сопоставления с шаблоном. Свойства объекта могут быть сопоставителями для дальнейшего ослабления ожидания. См. примеры.
Использование
// Утверждение некоторых свойств.
expect({ foo: 1, bar: 2 }).toEqual(expect.objectContaining({ foo: 1 }));
// Сопоставители также могут быть использованы для свойств.
expect({ foo: 1, bar: 2 }).toEqual(expect.objectContaining({ bar: expect.any(Number) }));
// Сложное сопоставление под-свойств.
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
[Object]#Ожидаемый шаблон объекта, содержащий подмножество свойств.
stringContaining
Добавлено в: v1.9expect.stringContaining()
соответствует строке, которая содержит ожидаемую подстроку. Используйте этот метод внутри expect(value).toEqual() для выполнения сопоставления с шаблоном.
Использование
expect('Hello world!').toEqual(expect.stringContaining('Hello'));
Аргументы
-
expected
[string]#Ожидаемая подстрока.
stringMatching
Добавлено в: v1.9expect.stringMatching()
соответствует полученной строке, которая, в свою очередь, соответствует ожидаемому шаблону. Используйте этот метод внутри expect(value).toEqual() для выполнения сопоставления с шаблоном.
Использование
expect('123ms').toEqual(expect.stringMatching(/\d+m?s/));
// Внутри другого сопоставителя.
expect({
status: 'passed',
time: '123ms',
}).toEqual({
status: expect.stringMatching(/passed|failed/),
time: expect.stringMatching(/\d+m?s/),
});
Аргументы
-
expected
[string] | [RegExp]#Шаблон, которому должна соответствовать ожидаемая строка.
toBe
Добавлено в: v1.9Сравнивает значение с expected с помощью вызова Object.is
. Этот метод сравнивает объекты по ссылке, а не по их содержимому, аналогично оператору строгого равенства ===
.
Использование
const value = { prop: 1 };
expect(value).toBe(value);
expect(value).not.toBe({});
expect(value.prop).toBe(1);
Аргументы
-
expected
[Object]#Ожидаемое значение.
toBeCloseTo
Добавлено в: v1.9Сравнивает числа с плавающей запятой для приблизительного равенства. Используйте этот метод вместо expect(value).toBe() при сравнении чисел с плавающей запятой.
Использование
expect(0.1 + 0.2).not.toBe(0.3);
expect(0.1 + 0.2).toBeCloseTo(0.3, 5);
Аргументы
-
expected
[number]#Ожидаемое значение.
-
numDigits
[number] (опционально)#Количество десятичных знаков после запятой, которые должны совпадать.
toBeDefined
Добавлено в: v1.9Убеждается, что значение не undefined
.
Использование
const value = null;
expect(value).toBeDefined();
toBeFalsy
Добавлено в: v1.9Убеждается, что значение ложно в булевом контексте, одно из false
, 0
, ''
, null
, undefined
или NaN
. Используйте этот метод, когда вам не важно конкретное значение.
Использование
const value = null;
expect(value).toBeFalsy();
toBeGreaterThan
Добавлено в: v1.9Убеждается, что value > expected
для числовых или больших целых значений.
Использование
const value = 42;
expect(value).toBeGreaterThan(1);
Аргументы
-
expected
[number] | [bigint]#Значение для сравнения.
toBeGreaterThanOrEqual
Добавлено в: v1.9Убеждается, что value >= expected
для числовых или больших целых значений.
Использование
const value = 42;
expect(value).toBeGreaterThanOrEqual(42);
Аргументы
-
expected
[number] | [bigint]#Значение для сравнения.
toBeInstanceOf
Добавлено в: v1.9Убеждается, что значение является экземпляром класса. Использует оператор instanceof
.
Использование
expect(page).toBeInstanceOf(Page);
class Example {}
expect(new Example()).toBeInstanceOf(Example);
Аргументы
-
expected
[Function]#Класс или функция-конструктор.
toBeLessThan
Добавлено в: v1.9Убеждается, что value < expected
для числовых или больших целых значений.
Использование
const value = 42;
expect(value).toBeLessThan(100);
Аргументы
-
expected
[number] | [bigint]#Значение для сравнения.
toBeLessThanOrEqual
Добавлено в: v1.9Убеждается, что value <= expected
для числовых или больших целых значений.
Использование
const value = 42;
expect(value).toBeLessThanOrEqual(42);
Аргументы
-
expected
[number] | [bigint]#Значение для сравнения.
toBeNaN
Добавлено в: v1.9Убеждается, что значение является NaN
.
Использование
const value = NaN;
expect(value).toBeNaN();
toBeNull
Добавлено в: v1.9Убеждается, что значение является null
.
Использование
const value = null;
expect(value).toBeNull();
toBeTruthy
Добавлено в: v1.9Убеждается, что значение истинно в булевом контексте, всё, кроме false
, 0
, ''
, null
, undefined
или NaN
. Используйте этот метод, когда вам не важно конкретное значение.
Использование
const value = { example: 'value' };
expect(value).toBeTruthy();
toBeUndefined
Добавлено в: v1.9Убеждается, что значение является undefined
.
Использование
const value = undefined;
expect(value).toBeUndefined();
toContain(expected)
Добавлено в: v1.9Убеждается, что строковое значение содержит ожидаемую подстроку. Сравнение чувствительно к регистру.
Использование
const value = 'Hello, World';
expect(value).toContain('World');
expect(value).toContain(',');
Аргументы
-
expected
[string]#Ожидаемая подстрока.
toContain(expected)
Добавлено в: v1.9Убеждается, что значение является Array
или Set
и содержит ожидаемый элемент.
Использование
const value = [1, 2, 3];
expect(value).toContain(2);
expect(new Set(value)).toContain(2);
Аргументы
-
expected
[Object]#Ожидаемое значение в коллекции.
toContainEqual
Добавлено в: v1.9Убеждается, что значение является 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
[Object]#Ожидаемое значение в коллекции.
toEqual
Добавлено в: v1.9Сравнивает содержимое значения с содержимым expected, выполняя проверку "глубокого равенства".
Для объектов этот метод рекурсивно проверяет равенство всех полей, а не сравнивает объекты по ссылке, как это делает 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
[Object]#Ожидаемое значение.
toHaveLength
Добавлено в: v1.9Убеждается, что значение имеет свойство .length
, равное expected. Полезно для массивов и строк.
Использование
expect('Hello, World').toHaveLength(12);
expect([1, 2, 3]).toHaveLength(3);
Аргументы
-
expected
[number]#Ожидаемая длина.
toHaveProperty
Добавлено в: v1.9Убеждается, что свойство по указанному keyPath
существует в объекте и, при необходимости, проверяет, что свойство равно expected. Равенство проверяется рекурсивно, аналогично 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
[string]#Путь к свойству. Используйте точечную нотацию
a.b
для проверки вложенных свойств и индексированную нотациюa[2]
для проверки вложенных элементов массива. -
expected
[Object] (опционально)#Опциональное ожидаемое значение для сравнения со свойством.
toMatch
Добавлено в: v1.9Убеждается, что строковое значение соответствует регулярному выражению.
Использование
const value = 'Is 42 enough?';
expect(value).toMatch(/Is \d+ enough/);
Аргументы
-
expected
[RegExp] | [string]#Регулярное выражение для сопоставления.
toMatchObject
Добавлено в: v1.9Сравнивает содержимое значения с содержимым expected, выполняя проверку "глубокого равенства". Допускает наличие дополнительных свойств в значении, в отличие от 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 }]);
Аргументы
-
expected
[Object] | [Array]#Ожидаемое значение объекта для сопоставления.
toStrictEqual
Добавлено в: v1.9Сравнивает содержимое значения с содержимым expected и их типы.
Отличия от 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
[Object]#Ожидаемое значение.
toThrow
Добавлено в: v1.9Вызывает функцию и убеждается, что она выбрасывает ошибку.
Опционально сравнивает ошибку с expected. Допустимые ожидаемые значения:
- Регулярное выражение - сообщение об ошибке должно соответствовать шаблону.
- Строка - сообщение об ошибке должно включать подстроку.
- Объект ошибки - сообщение об ошибке должно быть равно свойству message объекта.
- Класс ошибки - объект ошибки должен быть экземпляром класса.
Использование
expect(() => {
throw new Error('Something bad');
}).toThrow();
expect(() => {
throw new Error('Something bad');
}).toThrow(/something/);
expect(() => {
throw new Error('Something bad');
}).toThrow(Error);
Аргументы
-
expected
[Object] (опционально)#Ожидаемое сообщение об ошибке или объект ошибки.
toThrowError
Добавлено в: v1.9Алиас для expect(value).toThrow().
Использование
expect(() => {
throw new Error('Something bad');
}).toThrowError();
Аргументы
-
expected
[Object] (опционально)#Ожидаемое сообщение об ошибке или объект ошибки.
Свойства
not
Добавлено в: v1.9Делает проверку утверждения на противоположное условие. Например, следующий код пройдет:
const value = 1;
expect(value).not.toBe(2);
Использование
expect(value).not
Тип
- [GenericAssertions]