рд╣реЗрд▓реЛ, рд╣реЗрдмреНрд░! рдпрд╣ рдЧрд╛рдЗрдб рдЬреЗрд╕реНрдЯ рдЬреИрд╕реЗ рдорд╣рд╛рди рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рдпреЛрдЬрдирд╛рдмрджреНрдз рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкрд╣рд▓рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рд╕рд╛рдордЧреНрд░реА рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреА рдФрд░ рдЬреЛ рдЕрднреА рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдврд╛рдВрдЪреЗ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ: рдЬреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХреИрд╕реЗ рдХрд░реЗрдВ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ, рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛рдВрдЪреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рддрд░реАрдХреЗ рд╣реИрдВред рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ - рдХреИрдЯ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!рдЬреЗрд╕реНрдЯ рдХреНрдпрд╛ рд╣реИ?
рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реЛрдо рдкреЗрдЬ рдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:рдЬреЗрд╕реНрдЯ рд╕рд░рд▓рддрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрджреНрднреБрдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИред
рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬреЗрд╕реНрдЯ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЗрд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рдордЭрдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рднреА рд╣реИрдВред Node, React, Angular, Vue, Babel, TypeScript рдФрд░ рдЕрдзрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд┐рдпрд╛редрдпрд╣ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рднреА рд╣реИ рдФрд░ рдлреЗрд╕рдмреБрдХ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИредрд╕реНрдерд╛рдкрдирд╛
рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЗрд╕реНрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд░реЗрдВ:npm install --save-dev jest
рдпрджрд┐ рдЖрдк рдпрд╛рд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:yarn add --dev jest
рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, рдЖрдк рдЕрдкрдиреЗ package.json рдХреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗрдХреНрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:тАЬscriptsтАЭ : {
тАЬtestтАЭ: тАЬjestтАЭ
}
рдЗрд╕ рд╕рд░рд▓ рдХреЙрд▓ рдХреЗ рд╕рд╛рде, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬреЗрд╕реНрдЯ рдХреЛ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА)редрдЖрдк рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд▓реЗрдХрд┐рди рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХреА рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдерд╛рдкрдирд╛ рдЦрд░рд╛рдм рдЕрднреНрдпрд╛рд╕ рд╣реИ):npm install jest --global
рдФрд░ рдпрд╛рд░реНрди рдХреЗ рдЕрдиреБрд╕рд╛рд░:yarn global add jest
рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рд╕реАрдзреЗ рдЬреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рдореЗрдВ jest --init рдХрдорд╛рдВрдб рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ, рдХреБрдЫ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ jest.config.js рд╕реЗрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓ рдЬрд╛рдПрдЧреАред рдпрд╛ рдЖрдк рд╕реАрдзреЗ рдЕрдкрдиреЗ package.json рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "jest" рдХреБрдВрдЬреА рдХреЛ json рд░реВрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЖрдк рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдмрд╛рдж рдореЗрдВ рд╕реНрд╡рдпрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдЪреВрдВрдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрд┐рдирд╛, рддреБрд░рдВрдд рдЬреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрдкрд╣рд▓реЗ рдкрд░реАрдХреНрд╖рдг
рдЪрд▓рд┐рдП first.test.js рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░рд╛ рдкрд╣рд▓рд╛ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
test('My first test', () => {
expect(Math.max(1, 5, 10)).toBe(10);
});
рдФрд░ npm рд░рди рдЯреЗрд╕реНрдЯ рдпрд╛ рд╕реАрдзреЗ рдЬреЗрд╕реНрдЯ рдХрдорд╛рдВрдб (рдпрджрд┐ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВред рд▓реЙрдиреНрдЪ рдХреЗ рдмрд╛рдж, рд╣рдо рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдкрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рджреЗрдЦреЗрдВрдЧреЗред <b>PASS</b> ./first.test.js
тЬУ My first test (1 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 0.618 s, estimated 1 s
рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ рддреЛрдбрд╝реЗрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рджреМрдбрд╝реЗрдВ:
test('My first test', () => {
expect(Math.max(1, 5, 10)).toBe(5);
});
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдм рд╣рдорд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЬреЗрд╕реНрдЯ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╣рд╛рдБ рд╣реБрдИ, рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рдерд╛, рдФрд░ рдЗрд╕рдХреЗ рдмрджрд▓реЗ рд╣рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рд╛редрдЕрдм рдкрд░реАрдХреНрд╖рд╛ рдХреЗ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВред рдкрд░реАрдХреНрд╖рдг рд╕рдорд╛рд░реЛрд╣рдПрдХ рдирдпрд╛ рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рддреАрди рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдордиреЗ рджреЛ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛)ред рдкрд╣рд▓рд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИ, рдЗрд╕рдХрд╛ рдЬреЗрд╕реНрдЯ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛ред рджреВрд╕рд░рд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЖрдк 3 рддрд░реНрдХ - рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди 5 рд╕реЗрдХрдВрдб рд╣реИред рдпрд╣ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрдм рд╣рдо рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рджреЗ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╕рдордп рдХреЗ рдмрд╛рдж, рдпрджрд┐ рд╡рд╛рджреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдЧрдИ рдереА - рдЬреЗрд╕реНрдЯ рдкрд░реАрдХреНрд╖рдг рдХреЛ рд╡рд┐рдлрд▓ рдорд╛рдиреЗрдВрдЧреЗред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднрд╛рдЧреЛрдВ рдореЗрдВ рд╣реЛрдЧреАред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рдЗрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрдЬрд╛рдп () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ редред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЙрд▓ рдореЗрдВ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИред рдпрд╣ () рдкрд░реАрдХреНрд╖рдг рдкрд░ рдПрдХ рдЙрдкрдирд╛рдо () рдлрд╝рдВрдХреНрд╢рди рд╣реИ редрдкрд░реАрдХреНрд╖рдг рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░, рд╣рдо рдкрд╣рд▓реЗ рдЙрдореНрдореАрдж () рдХрд╣рддреЗ рд╣реИрдВ ред рдЙрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЙрд╕ рдорд╛рди рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдЬрд╛рдБрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ Math.max (1, 5, 10) рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ ред рдЕрдкреЗрдХреНрд╖рд╛ () рдПрдХ рдЖрд╡рд░рдг рд╡рд╕реНрддреБ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдорд╛рди рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдореА рдореВрд▓реНрдп рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рдЗрди рддрд░реАрдХреЛрдВ рд╣рдо рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЯреЛрдмреЗ редрдЖрдЗрдП рдЗрди рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдореБрдЦреНрдп рджреЗрдЦреЗрдВ:- toBe() тАФ , , . Object.is(). === 0 -0, NaN c NaN.
- toEqual() тАФ , . . . .
test('toEqual with objects', () => {
expect({ foo: 'foo', subObject: { baz: 'baz' } })
.toEqual({ foo: 'foo', subObject: { baz: 'baz' } });
expect({ foo: 'foo', subObject: { num: 0 } })
.toEqual({ foo: 'foo', subObject: { baz: 'baz' } });
});
test('toEqual with arrays', () => {
expect([11, 19, 5]).toEqual([11, 19, 5]);
expect([11, 19, 5]).toEqual([11, 19]);
});
- toContain() тАФ . ===.
const arr = ['apple', 'orange', 'banana'];
expect(arr).toContain('banana');
expect(new Set(arr)).toContain('banana');
expect('apple, orange, banana').toContain('banana');
- toContainEqual() тАФ .
expect([{a: 1}, {b: 2}]).toContainEqual({a: 1});
- toHaveLength() тАФ length .
expect([1, 2, 3, 4]).toHaveLength(4);
expect('foo').toHaveLength(3);
expect({ length: 1 }).toHaveLength(1);
- toBeNull() тАФ null.
- toBeUndefined() тАФ undefined.
- toBeDefined() тАФ toBeUndefined. !== undefined.
- toBeTruthy() тАФ true. false, null, undefined, 0, NaN .
- toBeFalsy() тАФ toBeTruthy(). false.
- toBeGreaterThan() toBeGreaterThanOrEqual() тАФ , >, >=.
- toBeLessThan() toBeLessThanOrEqual() тАФ toBeGreaterThan() toBeGreaterThanOrEqual()
- toBeCloseTo() тАФ , , . .
const num = 0.1 + 0.2;
expect(num).toBeCloseTo(0.3);
expect(Math.PI).toBeCloseTo(3.14, 2);
- toMatch() тАФ .
expect('Banana').toMatch(/Ba/);
- .Throw () - рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЕрдкрд╡рд╛рдж рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛред рдЖрдк рджреЛрдиреЛрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рддрдереНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ рдХреЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рддреЛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдпрд╛ рд╕рдВрджреЗрд╢ рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдПред
function funcWithError() {
throw new Error('some error');
}
expect(funcWithError).toThrow();
expect(funcWithError).toThrow(Error);
expect(funcWithError).toThrow('some error');
expect(funcWithError).toThrow(/some/);
- рдирд╣реАрдВ - рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рдЖрдкрдХреЛ рдЕрд╕рдорд╛рдирддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдпрд╣ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
expect(true).not.toBe(false);
expect({ foo: 'bar' }).not.toEqual({});
function funcWithoutError() {}
expect(funcWithoutError).not.toThrow();
рдЖрдЗрдП рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рд▓рд┐рдЦреЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╕рд░рд▓ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рдордВрдбрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реЛрдВрдЧреЗред
const area = (radius) => Math.PI * radius ** 2;
const circumference = (radius) => 2 * Math.PI * radius;
module.exports = { area, circumference };
рдЕрдЧрд▓рд╛, рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝реЗрдВ:
const circle = require('../src/circle');
test('Circle area', () => {
expect(circle.area(5)).toBeCloseTo(78.54);
expect(circle.area()).toBeNaN();
});
test('Circumference', () => {
expect(circle.circumference(11)).toBeCloseTo(69.1, 1);
expect(circle.circumference()).toBeNaN();
});
рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ, рд╣рдордиреЗ 2 рд╡рд┐рдзрд┐рдпреЛрдВ - рдХреНрд╖реЗрддреНрд░ рдФрд░ рдкрд░рд┐рдзрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдБрдЪ рдХреА ред ToBeCloseTo рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдБрдЪ рдХреАред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдордиреЗ 5 рдХреЗ рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рд╕рд╛рде рд╕рд░реНрдХрд▓ рдХреА рдЧрдгрдирд╛ рдпрд╛ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдХреНрд╖реЗрддреНрд░ рд▓рдЧрднрдЧ 78.54 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдЬрдмрдХрд┐ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп (рдпрд╣ 78.53981633974483 рд╣реЛрдЧрд╛) рдХреЗ рд╕рд╛рде рдЕрдВрддрд░ рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рдПрдЧреАред рджреВрд╕рд░реЗ рдореЗрдВ, рд╣рдордиреЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рд╣рдо 1 рджрд╢рдорд▓рд╡ рд╕реНрдерд╛рди рдХреЗ рднреАрддрд░ рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рд╣рдордиреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рддрд░реНрдХ рдХреЗ рдЕрдкрдиреЗ рддрд░реАрдХреЛрдВ рдХреЛ рднреА рдмреБрд▓рд╛рдпрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рдВрдЪ рдХреА ред рдЪреВрдВрдХрд┐ рдЙрдирдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо NaN рд╣реЛрдЧрд╛, рддреЛ рдкрд░реАрдХреНрд╖рдг рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗредрдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд▓реЗрддреЗ рд╣реИрдВред рдЪрд▓рд┐рдП рдПрдХ рдРрд╕рд╛ рдлрдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдХреАрдордд рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдЧрд╛:
const byPriceRange = (products, min, max) =>
products.filter(item => item.price >= min && item.price <= max);
module.exports = { byPriceRange };
рдФрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝реЗрдВ:
const productFilter = require('../src/producFilter');
const products = [
{ name: 'onion', price: 12 },
{ name: 'tomato', price: 26 },
{ name: 'banana', price: 29 },
{ name: 'orange', price: 38 }
];
test('Test product filter by range', () => {
const FROM = 15;
const TO = 30;
const filteredProducts = productFilter.byPriceRange(products, FROM, TO);
expect(filteredProducts).toHaveLength(2);
expect(filteredProducts).toContainEqual({ name: 'tomato', price: 26 });
expect(filteredProducts).toEqual([{ name: 'tomato', price: 26 }, { name: 'banana', price: 29 }]);
expect(filteredProducts[0].price).toBeGreaterThanOrEqual(FROM);
expect(filteredProducts[1].price).toBeLessThanOrEqual(TO);
expect(filteredProducts).not.toContainEqual({ name: 'orange', price: 38 });
});
рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рд╣рдо byRangePrice рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВрдЧреЗ ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ рдкрд░рд┐рдгрд╛рдореА рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА - рдПрдХ рдХреА рдЬрд╛рдБрдЪ рдХреАред 2. рдЕрдЧрд▓реЗ рдЪреЗрдХ рдореЗрдВ рддрддреНрд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - {name: 'tomato', рдХреАрдордд: 26}ред рд╕рд░рдгреА рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдкрд╛рд╕ рдХреА рдЧрдИ рд╡рд╕реНрддреБ toCtaintainEqual рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ, рди рдХрд┐ рдПрдХ рд╣реА рдХрд╛ рд╕рдВрджрд░реНрднред рд▓реЗрдХрд┐рди toCtaintainEqual рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрддреНрддрд┐ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдЧрд╛ред рдЪреВрдВрдХрд┐ рджреЛрдиреЛрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдорд╛рди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рддреНрдпрд╛рдкрди рд╕рдлрд▓ рд╣реЛрдЧрд╛ред рдЕрдЧрд▓рд╛, рд╣рдо рдкреВрд░реЗ рд╕рд░рдгреА рдФрд░ рдЙрд╕рдХреЗ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП inququal рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред ToBeGreaterThanOrEqual рдФрд░ toBeLessThanOrEqual рддрд░реАрдХреЛрдВ рд╣рдореЗрдВ рд╕рд░рдгреА рдХреЗ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рддрддреНрд╡ рдХреА рдХреАрдордд рдХреА рдЬрд╛рдВрдЪ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред рдФрд░ рдЕрдВрдд рдореЗрдВ, not.toContainEqual рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛рдпрд╣ рдЬрд╛рдБрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рддрддреНрд╡ рдРрд░реЗ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ - {name: 'Orange', рдХреАрдордд: 38}, рдЬреЛ, рд╢рд░реНрдд рд╕реЗ, рд╡рд╣рд╛рдБ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПредрдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рд╣рдордиреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рддреНрдпрд╛рдкрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднрд╛рдЧреЛрдВ рдореЗрдВ, рд╣рдо рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ, рдЬреЗрд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдХрд┐ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдереЗ, рд╣рдо рдЗрд╕рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдмрд╣реБрдд рдХреБрдЫред