рдЕрдЧрд▓рд╛ рдкрд░реАрдХреНрд╖рдг
async function check() {
throw new Error('Test');
}
expect(async () =>
await check()
).toThrow();
рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рд╕реЗ рдирд╣реАрдВ рдкрдХрдбрд╝ рдкрд╛рдПрдЧрд╛ (рдореИрдВ рдЬреЗрд╕реНрдЯ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ)
рд╣рд╛рдВ, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рджреЗрдЦреЗрдВ https://github.com/facebook/jest/issues/1377
рдХреЗ рдмрдЬрд╛рдП
expect(async () => await check()).toThrow()
// Jest error: "Expected the function to throw an error. But it didn't throw anything."
рдпрд╣ рдХрд╛рдо:
expect(check()).rejects.toEqual(new Error('Test'))
рд╣рд╛рдБ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЕрдЬреАрдм рд╣реИ ...
рдЖрдк рдпрд╣ рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
let error;
try {
await check();
} catch (e) {
error = e;
}
expect(error).toEqual(new Error('Test'));
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд┐рдпрд╛:
async function check() {
throw new Error('Test');
}
expect(check()).rejects.toEqual(new Error('Test'))
рджреЗрдЦреЗрдВ: https://facebook.github.io/jest/docs/en/tutorial-async.html#rejects
рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ред
рдпрджрд┐ рдЖрдк рдореБрдЭреЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрдХрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рд╕рдВрджреЗрд╢ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ:
async function check() {
throw new SomeSpecificError('Whatever');
}
await check()
.then(() => {
throw new Error('Should go to .catch, not enter .then');
})
.catch((err) => {
expect(err).toBeInstanceOf(SomeSpecificError);
});
await expect(check).rejects.toThrow(SomeSpecificError);
рд╕рд╛рде рд╣реА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
await expect(check).rejects.toThrow(/DUPLICATES_DETECTED/);
рдореИрдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реВрдБред
async function check() {
throw new Error("Test");
}
await expect(check).rejects.toThrow(Error);
expect(received).rejects.toThrow()
received value must be a Promise.
Received:
function: [Function check]
рдЖрдкрдХреЛ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╛рджрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
async function check() {
throw new Error("Test");
}
await expect(check()).rejects.toThrow(Error);
рд╕рд╛рде рд╣реА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
it(`some test`, async () => {
async function check() {
try {
return Promise.reject(await asyncMethod());
} catch (error) {
throw new Error("test");
}
}
await expect(check()).rejects.toThrow(Error);
});
рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд╕рдВрд╕реНрдХрд░рдг
23.4.2
23.1.2
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдПрдХ рд╡рд╛рджреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЬрд┐рд╕ рдорд╛рдорд▓реЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдирд╣реАрдВ рд╣реИ :)
рдирдорд╕реНрддреЗ ! рдореИрдВ рдХреБрдЫ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рдПрд╕рд┐рдВрдХ рдХреЙрд▓ рдореЗрдВ рдХрд╕реНрдЯрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдирд┐рдореНрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
class CustomErrorType {}
// ...
test('check throws custom error', async () => {
async function check() {
throw new CustomErrorType();
}
await expect(check()).rejects.toThrow(CustomErrorType);
});
рддреЛ рдкрд░реАрдХреНрд╖рдг рдирд┐рдореНрди рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:
рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреА рдЕрдкреЗрдХреНрд╖рд╛:
"рдХрд╕реНрдЯрдо рдПрд░рд░ рдЯрд╛рдЗрдк"
рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдХреБрдЫ рдирд╣реАрдВ рдлреЗрдВрдХрд╛ред
рддреЛ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ - рдЬрдмрдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рд╡рд░реНрдЧ Error
ред рдЬрдм рдореИрдВ Error
рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ
```рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рд╡рд░реНрдЧ CustomErrorType рддреНрд░реБрдЯрд┐ рдмрдврд╝рд╛рддрд╛ рд╣реИ {}
````
рддреЛ рддреНрд░реБрдЯрд┐ рд╣реИ
рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреА рдЕрдкреЗрдХреНрд╖рд╛:
"рдХрд╕реНрдЯрдо рдПрд░рд░ рдЯрд╛рдЗрдк"
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдлреЗрдВрдХ рджрд┐рдпрд╛:
рддреНрд░реБрдЯрд┐
рдЙрд╕ рдирдореВрдиреЗ рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ, рдЗрд╕ рдкрд░ рдХреЛрдИ рд╕реБрд░рд╛рдЧ? рдореИрдВ рдЬреЗрд╕реНрдЯ 23.4.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред
@Marchelune рдЬрдм рдЖрдк class CustomErrorType extends Error {}
рд▓рд┐рдЦрддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдирдИ рдХрдХреНрд╖рд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк CustomErrorType рдХреЛ рдПрдХ рдмреЙрдбреА рджреЗрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╕рд┐рд░реНрдл рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЬреЛ рд╕реБрдкрд░ () рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдпрджрд┐ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреБрдЫ рдЕрд▓рдЧ рдлреЗрдВрдХрддрд╛ рд╣реИ рддреЛ рддреНрд░реБрдЯрд┐ рд╡рд░реНрдЧ рдФрд░ рдЙрд╕ рдзрд╛рдЧреЗ рд╕реЗ рд╕рд▓рд╛рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ (рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдХрд┐рдпрд╛)ред
toThrow()
рдЬрд╛рдБрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдореВрд▓реНрдп рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рддреНрд░реБрдЯрд┐ рд╡рд░реНрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИ - рддреЛ рдлреЗрдВрдХ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ред рдпрд╣ рдбреЙрдХреНрд╕ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ред
рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рднрд▓реЗ рд╣реА рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдлреЗрдВрдХрддрд╛ рд╣реИ:
async function f() {throw 'aa'}
const res = await expect(f()).rejects.toThrow()`
рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ):
async function f() {throw 'aa'}
const res = await expect(f()).rejects.toBeTruthy()`
@рдХрд░рдмреБрд░ рдЯрд╛рдЗрдкреЛ toBeThruthy
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП toBeTruthy
рдпрд╣рд╛рдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкрд░реАрдХреНрд╖рдг рд╣реИ рдЬреЛ рдЖрд╢реНрд╡рд╛рд╕рди рджреЗрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рдлреЗрдВрдХрддрд╛ рд╣реИ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
yourCoolAsyncMethod('yeah it is')
.then(ok => { // Presumes not a Promise<void>
expect(ok).toBeUndefined();
done();
})
.catch(bad => {
expect(bad).toBeDefined();
expect(bad).toMatchInlineSnapshot(
`Specifically serious error!`
);
done();
});
рд╣рд╛рдп @ рд╕рд┐рдореЗрдирдмреАред
рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рд╣реИ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
async function check() {
// do something
}
await expect(check()).rejects.toThrow(InternalServerErrorException);
рдЖрдВрддрд░рд┐рдХ рд╕рд░реНрд╡рд░ рддреНрд░реБрдЯрд┐ рдЕрдкрд╡рд╛рдж рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ....
рдореИрдВ рдХреИрд╕реЗ рдлреЗрдВрдХреА рдЧрдИ рддреНрд░реБрдЯрд┐ рдкрд░ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛрд░ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
рдпрд╣рд╛рдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкрд░реАрдХреНрд╖рдг рд╣реИ рдЬреЛ рдЖрд╢реНрд╡рд╛рд╕рди рджреЗрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рдлреЗрдВрдХрддрд╛ рд╣реИ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
yourCoolAsyncMethod('yeah it is') .then(ok => { expect(ok).toBeUndefined(); done(); }) .catch(bad => { expect(bad).toBeDefined(); expect(bad).toMatchInlineSnapshot( `Specifically serious error!` ); done(); });
рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ рддреЛ рдЖрдкрдХрд╛ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рддреЛ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдореВрд▓реНрдп рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ рдХрд┐ рдЬрд┐рд╕ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рд╡рд╛рд╣ рдпрд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рд╡рд╛рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд╣реА рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝реА рдирд╣реАрдВ рд╣реИред
рдЕрд░реЗ @ рдбреЗрд╡рд┐рдб-рдЯреЗрдиреЗрдВрдЯ
рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЙрд╕ рд╕рдордп Promise<notVoid>
рдкрджреНрдзрддрд┐ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ Promise<void>
рд▓рд┐рдП рднреА рдорд╛рдиреНрдп рд╣реИред рдореИрдВрдиреЗ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рдЬрд╡рд╛рдм рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛, рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдореИрдВрдиреЗ рдзрд╛рд░рдгрд╛рдПрдВ рдХреА рд╣реИрдВред рдореИрдВ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реВрдВред
рдзрдиреНрдпрд╡рд╛рдж
рд╣рд╛рдЙрдбреА @futuredayv
рдЕрд░реЗ @ рдбреЗрд╡рд┐рдб-рдЯреЗрдиреЗрдВрдЯ
рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЙрд╕ рд╕рдордп
Promise<notVoid>
рдкрджреНрдзрддрд┐ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛPromise<void>
рд▓рд┐рдП рднреА рдорд╛рдиреНрдп рд╣реИред рдореИрдВрдиреЗ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рдЬрд╡рд╛рдм рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛, рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдореИрдВрдиреЗ рдзрд╛рд░рдгрд╛рдПрдВ рдХреА рд╣реИрдВред рдореИрдВ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реВрдВредрдзрдиреНрдпрд╡рд╛рдж
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рднреА рдЖрдкрдХрд╛ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдХреМрди рд╕рд╛ рдмрдЧ рд╕рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?
done()
рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ "рдореЗрд░рд╛ рдкрд░реАрдХреНрд╖рдг рдЕрдкреЗрдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдкрд╛рд╕ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЕрдкрдиреЗ рдЕрдЧрд▓реЗ рдкрд░реАрдХреНрд╖рдг рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ"
yourCoolAsyncMethod('yeah it is')
// -- Lets say your method does not throw, and returns void instead
.then(ok => { // Presumes not a Promise<void>
expect(ok).toBeUndefined(); // -- At this point if it was void, this would pass
done(); // -- Then your test would end and the catch would not be reached
// -- Now you have unknown behavior passing a test where it's suppose to catch a fail
})
.catch(bad => {
// -- This block does not run because done() is called above
expect(bad).toBeDefined();
expect(bad).toMatchInlineSnapshot(
`Specifically serious error!`
);
done();
});
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдореИрдВ done()
рдХреЛ then
рдХреЙрд▓ рди рдХрд░рдХреЗ рдпрд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдлрд┐рд░" рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рдХрд░ рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛,
yourCoolAsyncMethod('yeah it is')
.then(ok => throw new Error("This block of code should not be reached")
.catch(bad => {
expect(bad).toBeDefined();
expect(bad).toMatchInlineSnapshot(
`Specifically serious error!`
);
done();
});
рдпрджрд┐ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреБрдЫ рдЕрд▓рдЧ рдлреЗрдВрдХрддрд╛ рд╣реИ рддреЛ рддреНрд░реБрдЯрд┐ рд╡рд░реНрдЧ рдФрд░ рдЙрд╕ рдзрд╛рдЧреЗ рд╕реЗ рд╕рд▓рд╛рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ (рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдХрд┐рдпрд╛)ред
toThrow()
рдЬрд╛рдБрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдореВрд▓реНрдп рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рддреНрд░реБрдЯрд┐ рд╡рд░реНрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИ - рддреЛ рдлреЗрдВрдХ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ред рдпрд╣ рдбреЙрдХреНрд╕ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ред
рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рднрд▓реЗ рд╣реА рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдлреЗрдВрдХрддрд╛ рд╣реИ:async function f() {throw 'aa'} const res = await expect(f()).rejects.toThrow()`
рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ):
async function f() {throw 'aa'} const res = await expect(f()).rejects.toBeTruthy()`
рдПрдХ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ toBeDefined()
рдХреЗ рдмрдЬрд╛рдп toBeTruthy()
:
async function f() {throw 'aa'}
const res = await expect(f()).rejects.toBeTruthy()`
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдХреЗ рдмрдЬрд╛рдП
рдпрд╣ рдХрд╛рдо:
рд╣рд╛рдБ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЕрдЬреАрдм рд╣реИ ...