Jest断言帰納
9288 ワード
Jestは本当に便利で、手が簡単で、ほとんど配置がゼロです.学習Jest matchersを記録します.大部分の説明と例を添付します.
toBe-toBeはObjectを用いる.isは に完全に等しいかどうかをテストします .not-反対の使用例 をテストするために使用される .toEqual-オブジェクトの値をチェックしたい場合は、toEqualに変更します.
最も簡単なテスト値の方法は、正確に一致するかどうかを見ることです.
オブジェクトの値をチェックしたい場合は、toEqualに変更します.
反対の使用例をテストするために使用
toBeNullはnull のみに一致する toBeUndefind undefined のみ一致 toBeDefined toBeUndefindとは逆 toBeTruthyは、任意のif文が真の に一致する toBeFalsy任意のif文に一致する
.toBeGreaterThan()- より大きい .toBeGreaterThanOrEqual()は 以上 .toBeLessThan()- 未満 .toBeLessThanOrEqual()- 以下 .toBeCloseTo()-浮動小数点数比較
比較浮動小数点数の等しい場合は、toBeCloseToを使用します.
toMatch-正規表現の文字 .toHaveLength(number)-長さのあるオブジェクトの長さを判断する
正規表現の文字
長さのあるオブジェクトの長さを判断する
.toContain(item)-配列に特定のサブアイテムが含まれているかどうかを判断する .toContaineEqual(item)-配列に特定のオブジェクトが含まれているかどうかを判断する .
配列に特定のサブアイテムが含まれているかどうかを判断
配列に特定のオブジェクトが含まれているかどうかを判断できます.toEqualとtoContainの結合に似ています.
.toMatchObject(object)-オブジェクトがネストされているkeyの下にあるvalueタイプ を判断します. .toHaveProperty(keyPath,value)-指定したpathの下にこの属性があるかどうかを判断する
オブジェクトのネストされたkeyの下にあるvalueタイプを判断するには、オブジェクトを入力する必要があります.
指定したpathの下にこの属性があるかどうかを判断し、ネストされたpathは'.'を使用できます.分割して、配列を使うこともできます.
expectを使用します.extendは自分のマッチング器をJestに追加します.カスタムマッチングは、2つのkeyを含むオブジェクトを返す必要があります.
これらのヘルプ関数は、カスタムマッチングのthisにあります. this.isNot this.equals(a, b) this.utils(matcherHint, printExpected and printReceived)
toThrow-テストする特定の関数は、呼び出し時にエラー を放出します. .resolvesと.rejects-promise をテストするために使用 .toHaveBeenCalled()-関数が呼び出されたかどうかを判断するために使用されます. .toHaveBeenCalledTimes(number)-判断関数が何回か呼び出されたことがある
テストする特定の関数は、呼び出し時にエラーを放出します.
promiseのテストに使用
.toHaveBeenCalled()にも別名があります.toBeCalled()は、関数が呼び出されたかどうかを判断するために使用されます.
TOHaveBeenCalledと同様に,判定関数が何度か呼び出された.
ノーマルマッチング
toBe
最も簡単なテスト値の方法は、正確に一致するかどうかを見ることです.
test('two plus two is four', () => {
expect(2 + 2).toBe(4);
});
toEqual
オブジェクトの値をチェックしたい場合は、toEqualに変更します.
test('object assignment', () => {
const data = {one: 1};
data['two'] = 2;
expect(data).toEqual({one: 1, two: 2});
});
.not
反対の使用例をテストするために使用
test('null', () => {
const n = null;
expect(n).not.toBeUndefined();
expect(n).not.toBeTruthy();
});
ブール値マッチング
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();
});
ディジタルマッチング
toBeGreaterThan、toBeGreaterThanOrEqual、toBeLessThan、toBeLessThanOrEqual
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 toEqual
expect(value).toBe(4);
expect(value).toEqual(4);
});
.toBeCloseTo()
比較浮動小数点数の等しい場合は、toBeCloseToを使用します.
test(' ', () => {
const value = 0.1 + 0.2; // 0.30000000000000004
expect(value).toBe(0.3); // , js
expect(value).toBeCloseTo(0.3); //
});
文字列マッチング
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/);
});
.toHaveLength(number)
長さのあるオブジェクトの長さを判断する
expect([1, 2, 3]).toHaveLength(3);
expect('abc').toHaveLength(3);
expect('').not.toHaveLength(5);
アレイマッチング
.toContain
配列に特定のサブアイテムが含まれているかどうかを判断
const shoppingList = [
'diapers',
'kleenex',
'trash bags',
'paper towels',
'beer',
];
test(' (shopping list) (beer)', () => {
expect(shoppingList).toContain('beer');
});
.toContainEqual(item)
配列に特定のオブジェクトが含まれているかどうかを判断できます.toEqualとtoContainの結合に似ています.
function myBeverages() {
return [
{delicious: true, sour: false},
{delicious: false, sour: true}
]
}
test('is delicious and not sour', () => {
const myBeverage = {delicious: true, sour: false};
expect(myBeverages()).toContainEqual(myBeverage);
});
オブジェクトマッチング
.toMatchObject(object)
オブジェクトのネストされたkeyの下にあるvalueタイプを判断するには、オブジェクトを入力する必要があります.
const houseForSale = {
bath: true,
bedrooms: 4,
kitchen: {
amenities: ['oven', 'stove', 'washer'],
area: 20,
wallColor: 'white',
},
};
const desiredHouse = {
bath: true,
kitchen: {
amenities: ['oven', 'stove', 'washer'],
wallColor: expect.stringMatching(/white|yellow/),
},
};
test('the house has my desired features', () => {
expect(houseForSale).toMatchObject(desiredHouse);
});
.toHaveProperty(keyPath, value)
指定したpathの下にこの属性があるかどうかを判断し、ネストされたpathは'.'を使用できます.分割して、配列を使うこともできます.
// Object containing house features to be tested
const houseForSale = {
bath: true,
bedrooms: 4,
kitchen: {
amenities: ['oven', 'stove', 'washer'],
area: 20,
wallColor: 'white',
},
};
test('this house has my desired features', () => {
// Simple Referencing
expect(houseForSale).toHaveProperty('bath');
expect(houseForSale).toHaveProperty('bedrooms', 4);
expect(houseForSale).not.toHaveProperty('pool');
// Deep referencing using dot notation
expect(houseForSale).toHaveProperty('kitchen.area', 20);
expect(houseForSale).toHaveProperty('kitchen.amenities', [
'oven',
'stove',
'washer',
]);
expect(houseForSale).not.toHaveProperty('kitchen.open');
// Deep referencing using an array containing the keyPath
expect(houseForSale).toHaveProperty(['kitchen', 'area'], 20);
expect(houseForSale).toHaveProperty(
['kitchen', 'amenities'],
['oven', 'stove', 'washer'],
);
expect(houseForSale).toHaveProperty(['kitchen', 'amenities', 0], 'oven');
expect(houseForSale).not.toHaveProperty(['kitchen', 'open']);
});
カスタムマッチング
expectを使用します.extendは自分のマッチング器をJestに追加します.カスタムマッチングは、2つのkeyを含むオブジェクトを返す必要があります.
{
pass:false //‘ ’,
message: () => 'message string' //‘ , ’
}
expect.extend({
toBeDivisibleBy(received, argument) {
const pass = received % argument == 0;
if (pass) {
return {
message: () =>
`expected ${received} not to be divisible by ${argument}`,
pass: true,
};
} else {
return {
message: () => `expected ${received} to be divisible by ${argument}`,
pass: false,
};
}
},
});
test('even and odd numbers', () => {
expect(100).toBeDivisibleBy(2);
expect(101).not.toBeDivisibleBy(2);
});
これらのヘルプ関数は、カスタムマッチングのthisにあります.
その他
toThrow
テストする特定の関数は、呼び出し時にエラーを放出します.
function compileAndroidCode() {
throw new ConfigError('you are using the wrong JDK');
}
test('compiling android goes as expected', () => {
expect(compileAndroidCode).toThrow();
expect(compileAndroidCode).toThrow(ConfigError);
// You can also use the exact error message or a regexp
expect(compileAndroidCode).toThrow('you are using the wrong JDK');
expect(compileAndroidCode).toThrow(/JDK/);
});
.resolvesと.rejects
promiseのテストに使用
//resolves
test('resolves to lemon', () => {
// make sure to add a return statement
return expect(Promise.resolve('lemon')).resolves.toBe('lemon');
});
//rejects
test('resolves to lemon', async () => {
await expect(Promise.resolve('lemon')).resolves.toBe('lemon');
await expect(Promise.resolve('lemon')).resolves.not.toBe('octopus');
});
.toHaveBeenCalled()
.toHaveBeenCalled()にも別名があります.toBeCalled()は、関数が呼び出されたかどうかを判断するために使用されます.
describe('drinkAll', () => {
test('drinks something lemon-flavored', () => {
const drink = jest.fn();
drinkAll(drink, 'lemon');
expect(drink).toHaveBeenCalled();
});
test('does not drink something octopus-flavored', () => {
const drink = jest.fn();
drinkAll(drink, 'octopus');
expect(drink).not.toHaveBeenCalled();
});
});
.toHaveBeenCalledTimes(number)
TOHaveBeenCalledと同様に,判定関数が何度か呼び出された.
test('drinkEach drinks each drink', () => {
const drink = jest.fn();
drinkEach(drink, ['lemon', 'octopus']);
expect(drink).toHaveBeenCalledTimes(2);
});