рдбрдореА рдХреЗ рд▓рд┐рдП рдЬреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдгред рднрд╛рдЧ 1

рд╣реЗрд▓реЛ, рд╣реЗрдмреНрд░! рдпрд╣ рдЧрд╛рдЗрдб рдЬреЗрд╕реНрдЯ рдЬреИрд╕реЗ рдорд╣рд╛рди рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рдпреЛрдЬрдирд╛рдмрджреНрдз рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкрд╣рд▓рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рд╕рд╛рдордЧреНрд░реА рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреА рдФрд░ рдЬреЛ рдЕрднреА рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдврд╛рдВрдЪреЗ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ: рдЬреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХреИрд╕реЗ рдХрд░реЗрдВ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ, рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛рдВрдЪреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рддрд░реАрдХреЗ рд╣реИрдВред рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ - рдХреИрдЯ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

рдЬреЗрд╕реНрдЯ рдХреНрдпрд╛ рд╣реИ?


рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реЛрдо рдкреЗрдЬ рдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЬреЗрд╕реНрдЯ рд╕рд░рд▓рддрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрджреНрднреБрдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИред
рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬреЗрд╕реНрдЯ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЗрд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рдордЭрдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рднреА рд╣реИрдВред 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 рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░рд╛ рдкрд╣рд▓рд╛ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

//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

рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ рддреЛрдбрд╝реЗрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рджреМрдбрд╝реЗрдВ:

//first.test.js
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; // 0.30000000000000004
    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();
    

рдЖрдЗрдП рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рд▓рд┐рдЦреЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╕рд░рд▓ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рдордВрдбрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реЛрдВрдЧреЗред

// src/circle.js
const area = (radius) => Math.PI * radius ** 2;
const circumference = (radius) => 2 * Math.PI * radius;
module.exports = { area, circumference };

рдЕрдЧрд▓рд╛, рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝реЗрдВ:

// tests/circle.test.js
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 рд╣реЛрдЧрд╛, рддреЛ рдкрд░реАрдХреНрд╖рдг рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд▓реЗрддреЗ рд╣реИрдВред рдЪрд▓рд┐рдП рдПрдХ рдРрд╕рд╛ рдлрдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдХреАрдордд рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдЧрд╛:

// src/productFilter.js
const byPriceRange = (products, min, max) =>
         products.filter(item => item.price >= min && item.price <= max);
module.exports = { byPriceRange };

рдФрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝реЗрдВ:

// tests/product.test.js
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}, рдЬреЛ, рд╢рд░реНрдд рд╕реЗ, рд╡рд╣рд╛рдБ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рд╣рдордиреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рддреНрдпрд╛рдкрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднрд╛рдЧреЛрдВ рдореЗрдВ, рд╣рдо рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ, рдЬреЗрд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдХрд┐ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдереЗ, рд╣рдо рдЗрд╕рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдмрд╣реБрдд рдХреБрдЫред

All Articles