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.9 で追加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));
引数
anything
バージョン v1.9 で追加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
バージョン v1.9 で追加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
バージョン v1.9 で追加浮動小数点数を近似的に等しいかどうか比較します。パターンマッチングを実行するには、このメソッドを expect(value).toEqual() の内部で使用します。2つの数値を比較するだけであれば、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) });
引数
objectContaining
バージョン v1.9 で追加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') }),
}));
引数
stringContaining
バージョン v1.9 で追加expect.stringContaining()
は、期待される部分文字列を含む文字列に一致します。パターンマッチングを実行するには、このメソッドを expect(value).toEqual() の内部で使用します。
使用例
expect('Hello world!').toEqual(expect.stringContaining('Hello'));
引数
stringMatching
バージョン v1.9 で追加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
バージョン v1.9 で追加Object.is
を呼び出すことによって、値を expected と比較します。このメソッドは、厳密等価演算子 ===
と同様に、オブジェクトの内容ではなく参照によってオブジェクトを比較します。
使用例
const value = { prop: 1 };
expect(value).toBe(value);
expect(value).not.toBe({});
expect(value.prop).toBe(1);
引数
toBeCloseTo
バージョン v1.9 で追加浮動小数点数を近似的に等しいかどうか比較します。浮動小数点数を比較する場合は、expect(value).toBe() の代わりにこのメソッドを使用してください。
使用例
expect(0.1 + 0.2).not.toBe(0.3);
expect(0.1 + 0.2).toBeCloseTo(0.3, 5);
引数
toBeDefined
バージョン v1.9 で追加値が undefined
でないことを保証します。
使用例
const value = null;
expect(value).toBeDefined();
toBeFalsy
バージョン v1.9 で追加値がブール値のコンテキストで false であること、つまり false
、0
、''
、null
、undefined
、または NaN
のいずれかであることを保証します。特定の値が重要でない場合、このメソッドを使用してください。
使用例
const value = null;
expect(value).toBeFalsy();
toBeGreaterThan
バージョン v1.9 で追加数値または大きな整数値に対して value > expected
であることを保証します。
使用例
const value = 42;
expect(value).toBeGreaterThan(1);
引数
toBeGreaterThanOrEqual
バージョン v1.9 で追加数値または大きな整数値に対して value >= expected
であることを保証します。
使用例
const value = 42;
expect(value).toBeGreaterThanOrEqual(42);
引数
toBeInstanceOf
バージョン v1.9 で追加値がクラスのインスタンスであることを保証します。instanceof
演算子を使用します。
使用例
expect(page).toBeInstanceOf(Page);
class Example {}
expect(new Example()).toBeInstanceOf(Example);
引数
toBeLessThan
バージョン v1.9 で追加数値または大きな整数値に対して value < expected
であることを保証します。
使用例
const value = 42;
expect(value).toBeLessThan(100);
引数
toBeLessThanOrEqual
バージョン v1.9 で追加数値または大きな整数値に対して value <= expected
であることを保証します。
使用例
const value = 42;
expect(value).toBeLessThanOrEqual(42);
引数
toBeNaN
バージョン v1.9 で追加値が NaN
であることを保証します。
使用例
const value = NaN;
expect(value).toBeNaN();
toBeNull
バージョン v1.9 で追加値が null
であることを保証します。
使用例
const value = null;
expect(value).toBeNull();
toBeTruthy
バージョン v1.9 で追加値がブール値のコンテキストで true であること、つまり 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(',');
引数
toContain(expected)
バージョン v1.9 で追加値が Array
または Set
であり、期待されるアイテムを含むことを保証します。
使用例
const value = [1, 2, 3];
expect(value).toContain(2);
expect(new Set(value)).toContain(2);
引数
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 });
引数
toEqual
バージョン v1.9 で追加値の内容を expected の内容と比較し、「深層の等価性」チェックを実行します。
オブジェクトの場合、このメソッドは expect(value).toBe() によって実行されるオブジェクトを参照で比較するのではなく、すべてのフィールドの等価性を再帰的にチェックします。
プリミティブ値の場合、このメソッドは expect(value).toBe() と同等です。
使用例
const value = { prop: 1 };
expect(value).toEqual({ prop: 1 });
非厳密な等価性
expect(value).toEqual() は、受信した値と期待される値の内容を比較する深層の等価性チェックを実行します。2つのオブジェクトが同じインスタンスを参照していることを確認するには、代わりに 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') }),
}));
引数
toHaveLength
バージョン v1.9 で追加値が expected と等しい .length
プロパティを持つことを保証します。配列や文字列に役立ちます。
使用例
expect('Hello, World').toHaveLength(12);
expect([1, 2, 3]).toHaveLength(3);
引数
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);
引数
-
プロパティへのパス。ドット表記
a.b
を使用してネストされたプロパティをチェックし、インデックス付きa[2]
表記を使用してネストされた配列項目をチェックします。 -
プロパティを比較するためのオプションの期待値。
toMatch
バージョン v1.9 で追加文字列値が正規表現に一致することを保証します。
使用例
const value = 'Is 42 enough?';
expect(value).toMatch(/Is \d+ enough/);
引数
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 }]);
引数
toStrictEqual
バージョン v1.9 で追加値の内容を expected の内容およびそれらの型と比較します。
- undefined プロパティを持つキーがチェックされます。たとえば、
{ a: undefined, b: 2 }
は{ b: 2 }
と一致しません。 - 配列のスパース性がチェックされます。たとえば、
[, 1]
は[undefined, 1]
と一致しません。 - オブジェクト型が等しいかどうかがチェックされます。たとえば、フィールド
a
とb
を持つクラスインスタンスは、フィールドa
とb
を持つリテラルオブジェクトと等しくなりません。
使用例
const value = { prop: 1 };
expect(value).toStrictEqual({ prop: 1 });
引数
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);
引数
toThrowError
バージョン v1.9 で追加expect(value).toThrow() のエイリアス。
使用例
expect(() => {
throw new Error('Something bad');
}).toThrowError();
引数
プロパティ
not
バージョン v1.9 で追加アサーションを反対の条件でチェックします。たとえば、次のコードはパスします
const value = 1;
expect(value).not.toBe(2);
使用例
expect(value).not
型