рдпрджрд┐ рдПрдХ рдПрдХрд▓ it
рдореЗрдВ рдХрдИ рдЕрдкреЗрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ, рддреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рд▓рд╛рдЗрди рдирдВрдмрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рдХреНрд░реЙрд╕-рд░реЗрдлрд░ рдХрд┐рдП рдмрд┐рдирд╛ рдХреМрди рд╕реА рдЕрдкреЗрдХреНрд╖рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣реАред
test('api works', () => {
expect(api()).toEqual([]) // api without magic provides no items
expect(api(0)).toEqual([]) // api with zero magic also provides no items
expect(api(true)).toEqual([1,2,3]) // api with magic enabled provides all items
})
рдХреМрди рд╕реА рдЙрдореНрдореАрдж рд╡рд┐рдлрд▓ рд░рд╣реА? рдкрд╣рд▓рд╛ рдпрд╛ рджреВрд╕рд░рд╛?
рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреБрдЫ рдорд╛рдирд╡ рдкрдардиреАрдп рд╕рдВрджрд░реНрдн рд╣реЛрдВ рдЬреЛ рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреЗрдВ рдХрд┐ рдХреМрди рд╕реА рдЕрдкреЗрдХреНрд╖рд╛ рд╡рд┐рдлрд▓ рд░рд╣реА рдФрд░ рдорд╛рдирд╡ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ, рдмрд┐рдирд╛ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд▓рд╛рдЗрди рдирдВрдмрд░ рдЦреЛрдЬрдиреЗ рдФрд░ рдЙрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдореИрдкрд┐рдВрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдХреЛрдбред
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП tape
рдХреЗ рдмрд░рд╛рдмрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВ рдХрд┐ рдкрд╣рд▓реЗ рджрд╛рд╡реЗ рдХреА рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдмрд╛рдж рдЯреЗрдк рдЬрдорд╛рдирдд рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред tape
рдкреНрд░рддреНрдпреЗрдХ рдЕрдкреЗрдХреНрд╖рд╛ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдКрдкрд░ рдПрдХ рдорд╛рдирд╡-рдкрдардиреАрдп рд╕рдВрджреЗрд╢ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдП рдмрд┐рдирд╛ рдХреМрди рд╕рд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд░рд╣рд╛ред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдорд╛рдирд╡-рдкрдардиреАрдп рд╢реЛрд░ рдХреЛ рдкрд░реАрдХреНрд╖рдг рд╕реНрд░реЛрдд рдореЗрдВ рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рддрдХ рдзрдХреЗрд▓рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рдЖрдк рд╡реИрд╕реЗ рднреА рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
test('api works', t => {
t.deepEquals(api(), [], 'api without magic provides no items')
t.deepEquals(api(0), [], 'api with zero magic also provides no items')
t.deepEquals(api(true), [1,2,3], 'api with magic enabled provides all items')
})
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдирд╡-рдкрдардиреАрдп рдЬрд╛рдирдХрд╛рд░реА рдХреЛ jest
рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд it
рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓рдкреЗрдЯрдирд╛ рд╣реИ рдЬреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд╡рд░реНрдмреЛрдЬрд╝ рдЖрдИрдПрдордУ рд╣реИред
describe('api works', () => {
test('api without magic provides no items', () => {
expect(api()).toEqual([])
})
test('api with zero magic also provides no items', () => {
expect(api(0)).toEqual([])
})
test('api with magic enabled provides all items', () => {
expect(api(true)).toEqual([1,2,3])
})
})
рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдХреЛрдИ рднреА рдХрд┐рд╕реА рднреА рддрд░рд╣ expect
рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреБрдЫ рдорд╛рдирд╡-рдкрдардиреАрдп рд╕рдВрджрд░реНрдн рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЬреИрд╕реЗ
рдЕрднрд┐рдХрдерди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрдн рд╕рдВрджреЗрд╢:
test('api works', () => {
expect(api()).toEqual([], 'api without magic provides no items')
expect(api(0)).toEqual([], 'api with zero magic provides no items')
expect(api(true)).toEqual([1,2,3], 'api with magic enabled provides all items')
})
рдпрд╛ рд╕рдВрджрд░реНрдн рд╕рдВрджреЗрд╢ рдПрдХ рдЬрдВрдЬреАрд░ рдХреЗ рд░реВрдк рдореЗрдВ .because
рдпрд╛ .why
рдпрд╛ .comment
рдпрд╛ .t
рдпрд╛ рдХреБрдЫ рдФрд░:
test('api works', () => {
expect(api()).toEqual([]).because('api without magic provides no items')
expect(api(0)).toEqual([]).because('api with zero magic provides no items')
expect(api(true)).toEqual([1,2,3]).because('api with magic enabled provides all items')
})
рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рд╢рд╛рдпрдж рдФрд░ рднреА рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЬреЗрд╕реНрдЯ рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрд░реЛрдд рдХреЛрдб рд▓рд╛рдЗрди рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рд╕реНрд╡рдпрдВ рдЪрд╛рд▓реВ рд╣реИред
рдЕрд░реЗ! рддреЛ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдЬреИрд╕реНрдореАрди рдореЗрдВ рд░рдЦрддреЗ рдереЗ рд▓реЗрдХрд┐рди рдкрд╛рдпрд╛ рдХрд┐ рдПрдлрдмреА рдкрд░ рд╣рдЬрд╛рд░реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдлрд╛рдЗрд▓реЗрдВ, рдХрд┐рд╕реА рдиреЗ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рддреЛ рдЕрднреА рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрдиреБрдорд╛рдирд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдПрдХ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЪреНрдЫрд╛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЙрдореНрдореАрдж рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ (рдмрд┐рд▓реНрдХреБрд▓ рдЖрдкрдХреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреА рддрд░рд╣)ред рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╣рдо рдЙрд╕ рд▓рд╛рдЗрди рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рджрд╛рд╡рд╛ рдХрдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд▓рдВрдмрд╛ рд╣реЛрддрд╛ рд╣реИ:
expect(a).toEqual({
тАж
});
рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧреЗрдЧрд╛ рдФрд░ рд╣рдореЗрдВ рдЬреЗрдПрд╕ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдФрд░ рд▓рдВрдмреА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдзреНрд╡рд╕реНрдд рдХрд░рдирд╛) рдпрд╛ рдЗрд╕реЗ рд╕реБрдВрджрд░ рдмрдирд╛рдиреЗ рдХреЗ рд╕рдорд╛рди рдХреБрдЫред
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрднреА рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛ рд░рд╣реЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реЛ рд░рд╣реА рд╣реИред рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рдЬреЛ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдореБрджреНрджреЛрдВ рдХреЛ рддреЗрдЬрд╝реА рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред
рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдЬреИрд╕реНрдореАрди рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рдереЗ рд▓реЗрдХрд┐рди рдкрд╛рдпрд╛ рдХрд┐ рдПрдлрдмреА рдкрд░ рд╣рдЬрд╛рд░реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдлрд╛рдЗрд▓реЗрдВ, рдХрд┐рд╕реА рдиреЗ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛
@cpojer рддреЛ рдкреИрдЯрд░реНрди рдкреНрд░рддреНрдпреЗрдХ рджрд╛рд╡реЗ рдХреЛ it
рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рд╣реИ? рдФрд░/рдпрд╛ рдХреЗрд╡рд▓ рд▓рд╛рдЗрди рдирдВрдмрд░реЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВ?
рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЛ рдХрдо рдЕрдкрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмреЗрд╣рддрд░ рдпрд╛ рдмрджрддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдореМрдЬреВрджрд╛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╣реИ? рдпрд╛ рд╢рд╛рдпрдж рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рд╕реБрд╡рд┐рдзрд╛ рдореМрдЬреВрдж рд╣реИ? рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЬреИрд╕реНрдореАрди рдореЗрдВ рдерд╛ред
рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╣рдо рдЙрд╕ рд▓рд╛рдЗрди рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рдЕрднрд┐рдХрдерди рдХрдИ рд▓рд╛рдЗрдиреЗрдВ рд▓рдВрдмреА рд╣реЛрддреА рд╣реИ
рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рд╕реЗ рдЕрднрд┐рдХрдерди рдореЗрдВ рдЕрдзрд┐рдХ рдЕрд░реНрде рд╕рдВрдмрдВрдзреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рд╢рд╛рдпрдж?
const adminUser = {
тАж
}
expect(a).toEqual(adminUser);
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрднреА рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛ рд░рд╣реЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реЛ рд░рд╣реА рд╣реИ
рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЬрдм рддрдХ рдЖрдк рд╣рд░ рдЪреАрдЬ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╡рд░реНрдмреЛрдЬрд╝ (IMO) рд░реИрдкрд░ рдирд╣реАрдВ рдЬреЛрдбрд╝рддреЗ, рддрдм рддрдХ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рджрд╛рд╡рд╛ рд╡рд┐рдлрд▓ рд░рд╣рд╛ред рдпрд╣ рдПрдХ рдкрд╛рд░рджрд░реНрд╢реА рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдЪ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЛрд░реНрд╕рдореИрдк рд▓рд╛рдЗрди рдирдВрдмрд░ рд╣рдореЗрд╢рд╛ рд╕рдЯреАрдХ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░реАрдХреНрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд▓реНрджреА рдФрд░ рд╕рдЯреАрдХ рд╕рдордЭ рдЯреВрдЯ рдЧрдИ рдФрд░ рдХрд╣рд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рдЬреЛ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдореБрджреНрджреЛрдВ рдХреЛ рддреЗрдЬрд╝реА рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред
рдореИрдВрдиреЗ рдКрдкрд░ рдХреБрдЫ рд╕реБрдЭрд╛рд╡ рджрд┐рдП рд╣реИрдВ:
рдХреНрдпрд╛ рдЖрдк рдХреБрдЫ рдЖрд╕рд╛рди рдпрд╛ рдЕрд▓рдЧ рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВ?
рдЕрд░реЗ @timoxley! рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдРрд╕рд╛ рдХреБрдЫ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдерд╛ред
рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдорд┐рд▓рд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рд╕реЗ рдЪреАрдЬреЗрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдБ рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рдпрд╣ рдирд╣реАрдВ рдЬрд╛рди рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рддрд░реНрдХ рдПрдХ рдирд┐рдХрдЯрддрд╛ рд╣реИ рдпрд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢
expect(555).toBeCloseTo(111, 2, 'reason why');
expect(555).toBeCloseTo(111, 'reason why');
рджреВрд╕рд░рд╛ рд╕реБрдЭрд╛рд╡ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЬреИрд╕реЗ рд╣реА рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдореИрдЪрд░ рдлреЗрдВрдХ рджреЗрдЧрд╛
expect(1).toBe(2)/* will throw here */.because('reason');
рдореИрдЪрд░ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдо рдХрд╛рд░рдг рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:
expect(1).because('reason').toBe(2);
// or
because('reason').expect(1).toBe(2);
рд▓реЗрдХрд┐рди рдпрд╣ рдПрдкреАрдЖрдИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред
рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк expect
. рдореЗрдВ рджреВрд╕рд░рд╛ рддрд░реНрдХ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛
expect(1, 'just because').toBe(2);
рд▓реЗрдХрд┐рди рдпрд╣ рдкрд┐рдЫрд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рдорд╛рди рд╣реА рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЗрдВрдЬреАрдирд┐рдпрд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо рдЙрдирдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХрдард┐рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдХреЗрд╡рд▓ рдмрджрддрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред
рдЕрддреАрдд рдореЗрдВ, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╕реНрдЯрдо рдорд┐рд▓рд╛рдирдХрд░реНрддрд╛ рдмрдирд╛рдирд╛ рдерд╛ред рд╣рдо рдЬреЗрд╕реНрдЯ рдХреЗ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ expect.extend
рдкреЗрд╢ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдпрд╣ рдЖрдкрдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдореИрдЪрд░реНрд╕ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬреИрд╕реЗ:
expect(a).toEqualMySpecificThing(тАж)
рдЬреЛ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рд╡рд┐рдлрд▓рддрд╛ рд╕рдВрджреЗрд╢ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд░рд┐рд▓реЗ рдЬреИрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рднреА рдореИрдЪрд░реНрд╕ рджреЗрдЦреЗрдВ: https://github.com/facebook/relay/blob/master/src/tools/__mocks__/RelayTestUtils.js#L281
рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЗ рдХрд╛рд░рдг рдмрдВрдж рд╣реЛ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЕрдЪреНрдЫреЗ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рддреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред
@cpojer @dmitriiabramov рджреЗрд░реА рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред
expect
рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ рддрд░реНрдХ рдпрд╛ .because
рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░рдг рдХрд╛ рдкреАрдЫрд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рд╣реЛрдиреЗ рдпрд╛ рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдЗрдВрдЬреАрдирд┐рдпрд░ рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ
@cpojer рд╕рд╣рдордд! рдбрд┐рдмрдЧрд┐рдВрдЧ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рди рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рд╡рд┐рдлрд▓рддрд╛ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рдХрдо рд╡рд░реНрдмреЛрдЬрд╝ рдПрдкреАрдЖрдИ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред
рдХреБрдЫ рдареЛрд╕ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдЙрдкрд░реЛрдХреНрдд рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╕рдордХрдХреНрд╖ рджрд╛рд╡реЗ + рдЯреЗрдк рдХреЗ рд╕рд╛рде рд╕рдВрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреЗрд╕реНрдЯ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдФрдкрдЪрд╛рд░рд┐рдХ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рд▓рдЧрднрдЧ рджреЛрдЧреБрдирд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:
рдЗрд╕рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ!
// tape
test('api works', t => {
t.deepEquals(api(), [], 'api without magic provides no items')
t.deepEquals(api(0), [], 'api with zero magic also provides no items')
t.deepEquals(api(true), [1,2,3], 'api with magic enabled provides all items')
t.end()
})
// jest
describe('api works', () => {
test('api without magic provides no items', () => {
expect(api()).toEqual([])
})
test('api with zero magic also provides no items', () => {
expect(api(0)).toEqual([])
})
test('api with magic enabled provides all items', () => {
expect(api(true)).toEqual([1,2,3])
})
})
рдЕрджреНрдпрддрди : рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рддреАрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкрдВрдХреНрддрд┐ рдкрд░ рдордЬрд╝рд╛рдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
// jest
describe('api works', () => {
test('api without magic provides no items', () => expect(api()).toEqual([]))
test('api with zero magic also provides no items', () => expect(api(0)).toEqual([]))
test('api with magic enabled provides all items', () => expect(api(true)).toEqual([1,2,3]))
})
рдпрд╣ рдХреБрдЫ рд▓рдВрдмреА рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрди рдЖрдБрдХрдбрд╝реЛрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреА рд╣рдордиреЗ рдкрд╣рд▓реЗ рддреБрд▓рдирд╛ рдХреА рдереА:
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд▓рд╛рдЗрдирдмреНрд░реЗрдХ рдХреЗ рдмрд┐рдирд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рд╡рд░рдг рд╣реЛрдиреЗ рд╕реЗ, рддрд░реНрдХ рдХреЛ рджреГрд╖реНрдЯрд┐ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ "рдорд╛рдВрд╕" рдХреЛ рд░рдЦрддрд╛ рд╣реИ, рдпрд╛рдиреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджрд╛рд╡рд╛, рдХреБрдЫ рдордирдорд╛рдиреА рдХреЙрд▓рдо рд╕реНрдерд┐рддрд┐ рдкрд░ред
рдкрд░реАрдХреНрд╖рдг рд╡рд┐рд╡рд░рдг рдХреЛ рдкрдврд╝рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рд┐рд░реНрдл рдПрдХ рдорд╣рд┐рдорд╛рдордВрдбрд┐рдд рдЯрд┐рдкреНрдкрдгреА рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдкрдВрдХреНрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рд▓рд┐рдЦрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рджреБрдЦрдж рдкрд╛рдЧрд▓рдкрди рд╣реЛрдЧрд╛:
/* api without magic provides no items */ expect(api()).toEqual([])
/* api with zero magic also provides no items */ expect(api(0)).toEqual([])
/* api with magic enabled provides all items */ expect(api(true)).toEqual([1,2,3])
рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╕рднреА рдЕрднрд┐рдХрдерди рдХреЛрдб рдПрдХ рд╣реА рдХреЙрд▓рдо рдореЗрдВ рдмрдбрд╝реЗ рдХрд░реАрдиреЗ рд╕реЗ рдкрдВрдХреНрддрд┐рдмрджреНрдз рд╣реЛрдВрдЧреЗ рддрд╛рдХрд┐ рдЗрд╕реЗ рдорд╛рдирд╡ рджреНрд╡рд╛рд░рд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЗрд╕ рд╕реЛрдЪ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВ $#$4 expect
#$ рдХреЗ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реБрдЭрд╛рд╡ рдХреЗ рдмрдЬрд╛рдп рдкреАрдЫреЗ рд╡рд╛рд▓реЗ .because
рдлреЙрд░реНрдо рдХрд╛ рджреГрдврд╝рддрд╛ рд╕реЗ рдЪрдпрди рдХрд░реВрдВрдЧрд╛ред
рдмрд╛рддрдЪреАрдд рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдзреНрдпрд╛рди рджреЗрдВ, рдХрд┐ рдЖрдкрдХреЛ рд╡рд┐рд╡рд░рдг рдмреНрд▓реЙрдХ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЪреАрдЬреЗрдВ рдЫреЛрдЯреА рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред .because
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдореИрдЪрд░ рдлреЗрдВрдХрддрд╛ рд╣реИ (рдЬреЛ .because
рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИ), рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд╛рдо рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдкреНрд░рддреНрдпреЗрдХ рдореИрдЪрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрддрд┐рдо рддрд░реНрдХ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ?
рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрдм рд╣рдо рдЗрд╕реЗ expect
рдХреЗ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВред
рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рдХрд╛рд░рдг рд╣рдо рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореИрдЪрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ
рдЬреИрд╕реЗ
expect(obj).toHaveProperty('a.b.c', 'is that a reason or a value of the property?');
рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЗ рдХрд╛рд░рдг рдмрдВрдж рд╣реЛ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЕрдЪреНрдЫреЗ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рддреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред
@cpojer рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ expect(value).toBe(something, 'because message')
рдХреЗ рдЪрдореЗрд▓реА (рдФрд░ рдЕрдиреНрдп) рддрд░реАрдХреЗ рд╕реЗ рдЗрдВрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?
рдПрдХ рдЙрджрд╛рд╣рд░рдг redux-saga/redux-рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдХрд┐рд╕ рд░рд╛рдЬреНрдп рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реБрдЖ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╡рд░реНрдгрдирд╛рддреНрдордХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИред рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд┐рд╡рд░рдг рднреА рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ ..
@jayphelps рд╣рдо рдЕрдм рдЪрдореЗрд▓реА рдХреЗ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕рднреА рдЪрдореЗрд▓реА рдореИрдЪрд░реНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ
@dmitriiabramov рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдореЗрд░рд╛ рдкреНрд░рд╢реНрди рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ред рдХреНрдпрд╛ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдЪрдореЗрд▓реА _рд╡реЗ_ рдХреЛ рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рд╡реЗ рд╡рд╣реА рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡реЗ рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
@jayphelps рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛, рдпрд╣ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рдХрд╛рд░рдг рд╕рднреА рдореИрдЪрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
expect(obj).toHaveProperty('a.b.c', 'is that a reason or a value of the property?');
рдФрд░ рд╕рд┐рдВрдЧ рдЬреЗрд╕реНрдЯ рдореИрдЪрд░реНрд╕ рдХреЛ рдерд░реНрдб рдкрд╛рд░реНрдЯреА рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рддрд░реНрдХ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдЦрд┐рд▓рд╡рд╛рдбрд╝ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ
рд╕рдмрд╕реЗ рд╕рд╛рдл рд╡рд┐рдХрд▓реНрдк рд╢рд╛рдпрдж рдЗрд╕реЗ expect
рдХреЗ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИред
expect(123, 'jest because').toEqual(123);
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдПрдкреАрдЖрдИ рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдордиреЗ рдлреЗрд╕рдмреБрдХ рдЯреЗрд╕реНрдЯ рд╕реВрдЯ рдореЗрдВ рд▓рдЧрднрдЧ рдХрднреА рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдФрд░ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдирдпрд╛ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ:
beforeEach(someSharedSetup);
test('reason or description', () => expect(1).toBe(1));
рдпрд╣ рдмрд╕ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдФрд░ рд╣реИ :)
рдпрд╛ рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп describe()
рдХреЙрд▓ рдореЗрдВ рднреА рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред
@dmitriiabramov рдХрд╖реНрдЯрдкреНрд░рдж рдорд╛рдорд▓реЗ рддрдм рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдЖрдк рд░рд╛рдЬреНрдп рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╕рд╛рдЧ, рдорд╣рд╛рдХрд╛рд╡реНрдп, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдореЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реЗ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рд▓рд╛рдн рдХреЗ рдПрдХ рдЯрди рджреЛрд╣рд░рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ AFAIKред
it('stuff', () => {
const generator = incrementAsync();
expect(generator.next().value).toBe(
call(delay, 1000)
);
expect(generator.next().value).toBe(
put({ type: 'INCREMENT' })
);
expect(generator.next()).toBe(
{ done: true, value: undefined }
);
});
рдпрд╛ рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рд╡рд░рдг() рдХреЙрд▓ рдореЗрдВ рднреА рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рд╡рд┐рд╕реНрддреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдиреЗрд╕реНрдЯрд┐рдВрдЧ рд╡рд░реНрдгрди рдХреЙрд▓ AFAIK рд╕рд┐рд░реНрдл рдЕрдиреБрднрд╛рдЧ рд╢реАрд░реНрд╖рдХреЛрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛, рдкрд░реАрдХреНрд╖рдг рдЕрднреА рднреА рдПрдХ рд╕рд╛рде рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ, рд╣реИ рдирд╛?
рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ (рдлрд╝рд╛рдЗрд▓реЗрдВ) рдПрдХ рд╕рд╛рде рдЪрд▓рддреЗ рд╣реИрдВ, test()
рдХреЙрд▓ рдирд╣реАрдВ рдЪрд▓рддреЗ рд╣реИрдВред
рдореИрдВ рд╕реЛрдЪрдиреЗ рд▓рдЧрд╛ рд╣реВрдБ рдХрд┐ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ
test('111' () => {
jest.debug('write something only if it fails');
expect(1).toBe(2);
});
рдПрдХ рдмрд╛рдд рд╣реЛ рд╕рдХрддреА рд╣реИ
рдЗрд╕ рдЪрд░реНрдЪрд╛ рдФрд░ рдЗрд╕ рднрдВрдбрд╛рд░ рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫрд╛ рдФрд░ рдЕрд░реНрдердкреВрд░реНрдг рд╣реЛрдЧрд╛:
it('has all the methods', () => {
since('cookie is a method').expect(reply.cookie).toBeDefined();
since('download is a method').expect(reply.download).toBeDefined();
since('end is a method').expect(reply.end).toBeDefined();
// ...
});
рдЙрдкрдпреЛрдЧ because
рдПрдХ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдЕрд░реНрдердкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдореИрдВ since
рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдПрдХ рдкреАрдЖрд░ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВред
рдХреГрдкрдпрд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдореИрдВ рдЗрд╕реЗ рдмрд╣реБрдд рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЬрд╛рдирдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЦреБрджрд╛рдИ рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдХреГрдкрдпрд╛ рдпрд╣ рди рдХрд╣реЗрдВ "рд╕рд░рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВ"ред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЛ _writing_ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рд╕реЗ рдЕрдзрд┐рдХ рдирдлрд░рдд рд╣реИ, рд╡рд╣ рд╣реИ _rewriting_ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯред
рдПрдХ рдФрд░ рдкреНрд░рд╕реНрддрд╛рд╡ рдЬреЛ рдореИрдВрдиреЗ рдХрд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рдореИрдВ рднреВрд▓ рдЬрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЗрд╕реА рдореБрджреНрджреЗ рдореЗрдВ рдХрд╣рд╛рдВ рдерд╛, рдЗрд╕ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд┐ рдпрд╣ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдореБрдЭреЗ рд╢рд╛рдпрдж рдХреБрдЫ рдиреАрдВрдж рдЖ рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП :)
рдореБрдЭреЗ рдХреБрдЫ рд╕рд░рд▓ "рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк" рдбреЗрдореЛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рдЕрдм рд░рд┐рдХрд░реНрд╕рди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдкрд░ рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкрддрд▓рд╛ рдЖрд╡рд░рдг рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреНрд░реЙрдХреНрд╕реА рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЗрдиреНрд╣реЗрдВ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЬреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЖрд╡рд░рдг рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд░рдЪрдирд╛ рд╣реИ:
const since = (text) => {
return new Proxy(global, {
get: (orig, key) => {
return (...args) => {
try {
const stack = orig[key](...args);
return new Proxy(stack, {
get: (orig, key) => {
return (...args) => {
try {
const ret = orig[key](...args);
// ... implement recursion here
} catch (err) {
console.log('2', key, text, err);
throw err;
}
}
}
});
} catch (err) {
console.log('1', key, text, err);
throw err;
}
};
}
});
};
рддреАрди рдпрдерд╛рд░реНрдерд╡рд╛рджреА рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЗрд╕реЗ рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рджреЗрдЦреЗрдВ:
describe('Test', () => {
it('works', () => {
since('It fails!').expect('a').toEqual('b');
});
});
рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдЧреИрд░-рддреБрдЪреНрдЫ рдкрд░реАрдХреНрд╖рдг рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдордЭрджрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдкрд░реАрдХреНрд╖рдг рд╣рдореЗрд╢рд╛ рдЗрддрдиреЗ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред
рдХрд╕реНрдЯрдо рдореИрдЪрд░реНрд╕ рдпрд╛рдж рд░рдЦреЗрдВ - рд╡реЗ рдЧрдгрд┐рдд рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЬрдм рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдЫрд┐рдкрд╛рдирд╛ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЕрдкреЗрдХреНрд╖рд╛ рд╕рдВрджрд░реНрдн рдЖрдкрдХреЛ рдпрд╣ рд╕рдВрджрд░реНрдн рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдВрджрд░реНрдн рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЕрдм рддрдХ рджреЗрдЦрд╛ рд╣реИред
рдЬрдм рдореИрдВрдиреЗ рдХреБрдЫ рддреЛрдбрд╝ рджрд┐рдпрд╛ рдФрд░ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛, рддреЛ рдЬреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдбреАрдмрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рд▓реЙрдЧрд┐рдВрдЧ рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА _modifications рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЬреЛ рдХрд┐ рдЯреЗрд╕реНрдЯ рд░рди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рд╕реЗ рдмрд╣реБрдд рдХрдо рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬреИрд╕реНрдореАрди рдореЗрдВ, рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордЭ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╕рдВрджрд░реНрдн рдореБрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред
рдЬрд╛рд╡рд╛ рдХреЗ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ JUnit рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рднреА рдареАрдХ рд╡реИрд╕реА рд╣реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдореБрдЭрд╕реЗ рдЧрд▓рддреА рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣рд╛рдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ _technological_ рдкреНрд░рддрд┐рд╡рд╛рдж рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рдФрд░ "рдЗрд╕реЗ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧреЗрдЧрд╛" рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рд╕рд┐рд░реНрдл рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд╣реИрдВред
рдХреНрдпрд╛ рд╣рдо рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ jest.debug()
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ @aaronabramov рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореЗрд░реЗ рд▓рд┐рдП рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред
This:
it('has all the methods', () => {
since('cookie is a method', () => expect(reply.cookie).toBeDefined());
});
can be supported by adding this:
// setupTestFrameworkScriptFile.js
// http://facebook.github.io/jest/docs/configuration.html#setuptestframeworkscriptfile-string
global.since = (explanation, fn) => {
try {
fn();
} catch(e) {
e.message = explanation + '\n' + e.message;
throw e;
}
};
рд╕рд╛рде рд╣реА, рдЬреИрд╕реНрдореАрди-рдХрд╕реНрдЯрдо-рд╕рдВрджреЗрд╢ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИ:
describe('test', function() {
it('should be ok', function() {
since(function() {
return {'tiger': 'kitty'};
}).
expect(3).toEqual(4); // => '{"tiger":"kitty"}'
});
});
рдХреНрдпрд╛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдмрдиреЗ рд╣реИрдВред рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдореИрдВ рдХрд╕реНрдЯрдо рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рднреА рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рд╣рдореНрдо.. рдпрд╣ рднреА рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдореЗрд░реА рдЗрдЪреНрдЫрд╛ рд╕реВрдЪреА рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдЗрд╕ рдереНрд░реЗрдб рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдлреЗрд╕рдмреБрдХ рдкрд░ рдЬреЗрд╕реНрдЯ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЖрдкрдХреЗ рдЕрдкрдиреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕реБрдЭрд╛рд╡ рд╣реИрдВ рдЬреЛ рдореМрдЬреВрджрд╛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЙрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ рдЬреЛ рдХрдИ рдЕрдиреНрдп рд▓реЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рд╣реИ (рд╕реНрд╡рдпрдВ рд╢рд╛рдорд┐рд▓)ред
рдкреАрдЖрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЗ рддрд░реНрдХ () рдпрд╛ рдмрд╛рдж рд╕реЗ () рдкреНрд░рд╛рд░реВрдк рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдХреНрдпрд╛ рд▓рдЧреЗрдЧрд╛? рдореИрдВ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рджреЗрдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реВрдВред
рдореИрдВрдиреЗ рдЕрднреА рд╕реВрддреНрд░ рдХреЛ рдкрдврд╝рд╛ рд╣реИ рдФрд░ рджреЛрдиреЛрдВ рдкрдХреНрд╖реЛрдВ рдореЗрдВ рдЕрдЪреНрдЫреЗ рддрд░реНрдХ рджреЗрдЦреЗ рд╣реИрдВред рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ рдПрдХ рдХрд╕реНрдЯрдо рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ @timoxley рдореВрд▓ рд░реВрдк рд╕реЗ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрднреА рдореИрдВ рдХреБрдЫ рдРрд╕рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ:
import assert from 'assert'
import chalk from 'chalk'
test('api works', () => {
assert.deepEqual(
api(),
[],
chalk.red('api without magic provides no items')
)
assert.deepEqual(
api(0),
[],
chalk.red('api with zero magic also provides no items')
)
assert.deepEqual(
api(true),
[1, 2, 3],
chalk.red('api with magic enabled provides all items')
)
})
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд▓рд╛рд▓ рд░рдВрдЧ (рдЕрдиреНрдпрдерд╛ рдмрд┐рдирд╛ рд░рдВрдЧ рдХреЗ рдкреНрд░рд┐рдВрдЯ) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд╛рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдЗрд╕реЗ expect
рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реЛрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред
рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ since
рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдЧрд░ рджреВрд╕рд░реЗ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╡рд╣рд╛рдВ рдХреБрдЫ рдФрд░ рдлреЗрдВрдХ рджреЗрдВ:
const expectWithMessage = expect.withMessage(
'api with magic enabled provides all items'
)
expectWithMessage(api(true)).toEqual([1, 2, 3])
// could be rewritten like
expect
.withMessage('api with magic enabled provides all items')(api(true))
.toEqual([1, 2, 3])
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдпрд╣ since
рд╕реЗ рдмреЗрд╣рддрд░ рдкрд╕рдВрдж рд╣реИред рдореИрдВ рдЬреЛ рдХреБрдЫ рднреА рдЕрдЪреНрдЫрд╛ рд╣реВрдБ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ :)
рдУрд╣, рдФрд░ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЗрдВрдЬреАрдирд┐рдпрд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо рдЙрдирдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХрдард┐рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдХреЗрд╡рд▓ рдмрджрддрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред
рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╣рдо рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рдХрдард┐рди рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рдпреЛрдЧрд╛рддреНрдордХ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдЬреЛ рд▓реЛрдЧ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП "рд╕рдордп рдмрд░реНрдмрд╛рдж" рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ рдХреЗрд╡рд▓ рд╕рд╣рд╛рдпрдХ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╡реЗ рдПрдХ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдЖ рдЬрд╛рдПрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрдкрдпреЛрдЧреА рд╕рдВрджреЗрд╢ рд╣реЛрдВрдЧреЗ рдФрд░ рдлрд┐рд░ рд╡реЗ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдВрдЧреЗ рдЗрдВрдЬреАрдирд┐рдпрд░ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рджрд╛рд╡реЗ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рд▓рд┐рдпрд╛: рдкрд▓рдХ:
рд╣рд╛рдп @cpojer рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?
рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЬреЗрд╕реНрдЯ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ ... рдлрд┐рд▓рд╣рд╛рд▓ рдореИрдВ рдПрдХ рд▓реВрдк рдХреЗ рднреАрддрд░ рдПрдХ рдЕрд╕рдлрд▓ рджрд╛рд╡реЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреИрд╕реЗ
expectationsArray.forEach(expectation => expect(...))
рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдХрд╕реНрдЯрдо рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рдмрд┐рдирд╛ рдХреМрди рд╕реА рдЙрдореНрдореАрджреЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ (рдЬрдм рддрдХ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЧрд▓рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ ..?)
рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж
@ рдПрдордЬреЗ-рдПрдпрд░рд╡реЙрд▓реЗрдХреНрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд▓реВрдк рдореЗрдВ test
рдХреЗ рд╕рд╛рде рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЕрдЪреНрдЫреЗ рд╣реИрдВ:
const expectationsArray = [[0, 'a'], [1, 'b']];
expectationsArray.forEach(([expectation, desc]) => {
test(`test ${desc}`, () => {
expect(expectation).toBeGreaterThanOrEqual(2);
});
});
рдЙрдореНрдореАрджреЛрдВ рдХреЗ рджреМрд░рд╛рди рдХрд╕реНрдЯрдо рд╕рдВрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдХрд╛рд░рдг рдореБрдЭреЗ рдордЬрд╛рдХ рдХреЗ рд╕рд╛рде рднреА рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред test
рдХреЗ рддрд╣рдд рдЙрдореНрдореАрджреЛрдВ рдХреЛ рд▓рдкреЗрдЯрдирд╛ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЙрд▓ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдЬреЗрд╕реНрдЯ describe
(#2235 ) рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЛ рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрдиреНрд╣реЗрдВ test
рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХрд╛рдзрд┐рдХ test
рдиреЗрд╕реНрдЯреЗрдб рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
async function getArray() {
return [0,0,0,0,0,0]
}
describe('Custom messages with async', async () => {
const array = await getArray();
array.forEach((item) => {
test(`test${item}`, () => {
expect(item).toBe(0)
});
});
})
рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ?
рдУрдкреА рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП ("рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреБрдЫ рдорд╛рдирд╡ рдкрдардиреАрдп рд╕рдВрджрд░реНрдн рд╣реЛрдВ рдЬреЛ рдЗрд╕реЗ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреЗрдВ рдХрд┐ рдХреМрди рд╕реА рдЕрдкреЗрдХреНрд╖рд╛ рд╡рд┐рдлрд▓ рд░рд╣реА"), рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЬреЗрд╕реНрдЯ 22 рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣рдо рдЕрд╕рдлрд▓ рдЕрднрд┐рдХрдерди рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрджреЗрд╢ рдЕрднреА рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ? рдпрджрд┐ рдпрд╣ _is_ рд╣реИ, рддреЛ рдпрд╣ рдКрдкрд░ рдпрд╛ рдЕрднрд┐рдХрдерди рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдПрдХ рдХреЛрдб рдЯрд┐рдкреНрдкрдгреА рд╣реЛ рд╕рдХрддреА рд╣реИ
Async рд╡рд░реНрдгрди рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╣реИ (рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдбрдлрд╝реНрд░реЗрдо рджреНрд╡рд╛рд░рд╛ рдорджрдж рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреА)
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ async рд╡рд░реНрдгрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реВрдБрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп beforeEach
рдпрд╛ beforeAll
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдБрдЧрд╛
@kentcdodds рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ beforeEach
рдпрд╛ beforeAll
рд╕реЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓реЗрдВ? рдпрджрд┐ рдЖрдк beforeEach
рдФрд░ beforeAll
рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ async рдХреЙрд▓ рдкрд░рд┐рдгрд╛рдо рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЕрдВрдд рдореЗрдВ рдЖрдкрдХреЛ рдиреЗрд╕реНрдЯреЗрдб test
рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред
рдЖрд╣, рдореБрдЭреЗ рдпрд╛рдж рдЖрдпрд╛ рдХрд┐ рдЖрдк рдЙрд╕ рдПрд╕рд┐рдВрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рдереЗред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ ЁЯШЕ рд╣рд╛рдБ, рдЖрдк рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП beforeEach
рдпрд╛ beforeAll
рдирд╣реАрдВ рдХрд░ рд╕рдХреЗред
@SimenB , рд╕рдВрджрд░реНрдн рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдорджрдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрд╕реНрдЯрдо рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХрд╛рдВрд╢ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рд▓реЗрдХрд┐рди рдХрд╕реНрдЯрдо рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓реВрдк рдХреЗ рднреАрддрд░ рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬреИрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
@tojuhaka рдЗрд╕реЗ рдЖрдЬрдорд╛рдПрдВ: https://github.com/negativetwelve/jest-plugins/tree/master/packages/jest-plugin-context
рдУрдкреА рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП ("рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреБрдЫ рдорд╛рдирд╡ рдкрдардиреАрдп рд╕рдВрджрд░реНрдн рд╣реЛрдВ рдЬреЛ рдЗрд╕реЗ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреЗрдВ рдХрд┐ рдХреМрди рд╕реА рдЕрдкреЗрдХреНрд╖рд╛ рд╡рд┐рдлрд▓ рд░рд╣реА"), рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред
рд╣рд╛рдВ, рдпрд╣ рдореВрд▓ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реЗрд╢рди рд╕реЗ рдкрд╣рд▓реЗ рдореВрд▓ рд╕реНрд░реЛрдд рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ, рдЬреЛ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЬреЗрд╕реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рд╣реЛрдЧрд╛ред рдЖрдИрдПрдордУ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЖрдкреВрд░реНрддрд┐ рдХрд┐рдП рдЧрдП рд╕рдВрджреЗрд╢ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреА рдЗрдЬрд╛рдЬрдд рджреЗрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рднрд╛рд░реА рд╣рд╛рде рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИред
рдЕрднреА рдЬреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИред рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛:
рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рд╕рддреНрдп рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдореБрдЭреЗ рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рддреЗрдЬреА рд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдореИрдВ рджрд╛рд╡реЗ рдХреЗ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд╕реНрддреБ рдХреЛ рд▓реЙрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдЖрдк рдЙрд╕рдХреЗ рд▓рд┐рдП toHaveProperty
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
test('property', () => {
expect({foo: 'bar'}).toHaveProperty('baz', 'foobar');
});
рдЕрдЧрд░ рдЖрдк рд╕рд┐рд░реНрдл рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд╣рд╛рдВ рд╣реИ, рддреЛ рджреВрд╕рд░рд╛ рддрд░реНрдХ рдЫреЛрдбрд╝ рджреЗрдВред рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХрд╛ _some_ рдорд╛рди рд╣реИ, рддреЛ рдЖрдк expect.anything()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
toMatchObject
рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИред
рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ assert
рдХрд╛ рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
test('property', () => {
const obj = {foo: 'bar'};
assert.equal(obj.baz, 'foobar', JSON.stringify(obj));
});
рдкрд╛рд░рд┐рддреЛрд╖рд┐рдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред assert.equal(obj.baz, 'foobar', JSON.stringify(obj));
рдореЗрд░реЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
@SimenB @mpseidel рдореБрдЦрд░ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдХреЛрдИ рддреГрддреАрдп рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ? рдореБрдЭреЗ рдЬреЗрд╕реНрдЯ рдбреЙрдХреНрд╕ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред
@sharikovvladislav assert
рдПрдХ рдиреЛрдб рдХреЛрд░ рдореЙрдбреНрдпреВрд▓ рд╣реИ https://nodejs.org/api/assert.html
@mpseidel рдЙрдлрд╝! рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ред рд╢реБрдХреНрд░рд┐рдпрд╛ред рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИрдВред
рдореИрдВ рдврд╛рдВрдЪреЗ рдХреА рдЗрд╕ рд╕реАрдорд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЦрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓реЗрдХрд┐рди рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рд╣рдЯрд╛ рджреЗрдВ)
export const explain = (expectation: () => void, explanation: string) => {
try {
expectation();
} catch(e) {
console.log(explanation)
throw e;
}
}
рдирдорд╕реНрддреЗ,
рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрднреА рддрдХ рдХрд┐рд╕реА рдиреЗ рд▓реВрдк рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рд╕рдВрджреЗрд╢ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдмрд▓реНрдХрд┐ рд▓реВрдк рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдЧрд╛ред
jest-plugin-context
рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЗрд╕ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди рдпрд╣ рдереЛрдбрд╝рд╛ рднрд╛рд░реА рд╣реИ рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореБрджреНрджрд╛ рдЕрднреА рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЖрдИрдПрдордУ рд╣реИред
рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЛ рджреЗрдЦреЗрдВ
describe('MyStuff', () => {
it('should render and contain relevant inputs', () => {
const wrapper = shallowWrapped(<MyStuff />);
const expectedKeys = ['love','jest','but','need','details','for','expect'];
expectedKeys.forEach((key) => {
expect(wrapper.find({ id: key }).length).toEqual(1);
});
});
});
рдЕрдкрдиреЗ рдЕрдкрд░рд╛рдзреА рдХреЛ рдЦреЛрдЬрдиреЗ рдХрд╛ рд╕реМрднрд╛рдЧреНрдпред рдЕрднреА рдореБрдЭреЗ {len:.., key:..}
рдХреА рддрд░рд╣ рдПрдХ рд▓рд╛рдЗрди рдЬреЛрдбрд╝рдиреА рд╣реЛрдЧреА рдпрд╛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдпрд╣ рд╕рд╛рдл рдирд╣реАрдВ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдо рдФрд░ рдЖрдЗрдЯрдо рдкреНрд░рддрд┐рдкрд╛рджрди рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдПред
рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ toEqual(1).context("my message")
рдпрд╛ toEqual(1, "my message")
рдЬрд┐рддрдирд╛ рд╕рд░рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣рдореЗрд╢рд╛ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЬреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдорд╣рд╛рди рдХрд╛рдо рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реВрдВ)ред
рд╢рд╛рдпрдж рдЙрд╕реА рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреИрд╕реЗ chai
рдХрд░рддрд╛ рд╣реИ - рдпрд╛рдиреА рд╕рдВрджреЗрд╢ рдХреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдХреЙрд▓ рдХреЗ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
expect(foo, 'this detail').toEqual(2)
рдЯреА
рдкрд╣рд▓реЗ рдЪрдореЗрд▓реА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЖрдпрд╛ рдХрд┐ рдпрд╣ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐ afik рдпреЗ рд╕рднреА рдХрд╛рд░реНрдп рд╣реИрдВред рдХреНрдпрд╛ рд╣рдо рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ:
describe('MyStuff', () => {
describe('should render and contain relevant inputs', () => {
const wrapper = shallowWrapped(<MyStuff />);
const expectedKeys = ['love','jest','but','need','details','for','expect'];
expectedKeys.forEach((key) => {
it(`contains key "${key}"`, () =>
expect(wrapper.find({ id: key }).length).toEqual(1)
)
})
});
});
@akkerman рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рдиред рдЪреВрдВрдХрд┐ рд╡рд░реНрдгрди рдФрд░ рдпрд╣ рдЬрд╛рджреВ рдХреЗ рдЧреНрд▓реЛрдмрд▓реНрд╕ рд╣реИрдВ рдЬреЛ рдЬреЗрд╕реНрдЯ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдореБрдЭреЗ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╡реЗ рдЕрд╕реНрдкрд╖реНрдЯ рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рдерд╛ рдХрд┐ рд▓реВрдк рдореЗрдВ t` рд▓рд┐рдЦрдирд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдФрд░ рд╕рдВрд╢реЛрдзрдХ рдХрд╛ рдкреАрдЫрд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
expect(foo).toEqual(bar).because('reason with %s placeholders')
рдпрд╛ рд╢рд╛рдпрдж рдПрдХ рд╕рдорд╛рд░реЛрд╣
expect(foo).toEqual(bar).explainedBy((result) => `Lorem ipsum ${result}`)
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдФрд░ рд╕рдВрд╢реЛрдзрдХ рдЬрд▓реНрджреА рд╕реЗ рдЕрдкрдардиреАрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдЯреА
2018-04-19 13:47 рдЬреАрдПрдордЯреА+02:00 тАв рдЬрд┐рдпреЛрд╡рд╛рдиреА рдбреА рд╕реВрдЬрд╛ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com :
рдПрдХ рдФрд░ рд╕рдВрд╢реЛрдзрдХ рдХрд╛ рдкреАрдЫрд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
рдЙрдореНрдореАрдж (foo).toEqual(bar).рдХреНрдпреЛрдВрдХрд┐ ('% s рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рд░рдг')
рдпрд╛ рд╢рд╛рдпрдж рдПрдХ рд╕рдорд╛рд░реЛрд╣
рдЙрдореНрдореАрдж (foo).toEqual(bar).explainedBy((result) =>
Lorem ipsum ${result}
)-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/facebook/jest/issues/1965#issuecomment-382705387 , рдпрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
рд╕реВрддреНрд░
https://github.com/notifications/unsubscribe-auth/AAM5PwBCvET1KdEDeDEF7gGo708Naj8oks5tqHlSgaJpZM4Kc6Uu
.
--
рддрд╛рд░рдЬреЗрдИ рд╣реБрд╕реЗ
рдореЛрдмрд┐рд▓: 920 63 413
рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ expect
рдХрд╛рдо рдлреЗрдВрдХрдирд╛ рд╣реИ, рддреЛ рд╡рд╣ рд╡реИрд╕реЗ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╛ рддреЛ expect(something, 'some helpful text on failure').toEqual(somethingElse)
рдпрд╛ expect.context(something, 'some helpful text on).toEqual(somethingElse)
рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ
рдХреНрдпрд╛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЗрд╕реНрдЯ рдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд░рд╛рдЬреНрдп рдХреИрд╕реЗ рдХрдИ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
рдЗрди рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рдж рд░рд╛рдЬреНрдп рдХреИрд╕реЗ рдмрджрд▓ рдЧрдпрд╛ (рдпрд╛ рдирд╣реАрдВ рдмрджрд▓рд╛), рдЗрд╕рд▓рд┐рдП рдмрд╣реБ-рдЕрднрд┐рдХрдерди рдкрд░реАрдХреНрд╖рдг рдХрднреА-рдХрднреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ beforeEach
рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдореИрдВ рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдвреВрдВрдврддрд╛ рд░рд╣рддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдм рдореИрдВ @callumlocke рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдФрд░ рджрд╛рд╡реЗ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВред
рдЕрдЧрд░ рд╣рдо рдПрдХ рдРрд╕рд╛ рдПрдкреАрдЖрдИ рд▓реЗрдХрд░ рдЖрддреЗ рд╣реИрдВ рдЬрд┐рд╕рд╕реЗ рд▓реЛрдЧ рдирдлрд░рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдРрд╕реА рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ? рдореБрдЭреЗ рд╕рдЪ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдореВрд▓реНрдпрд╡рд╛рди рдФрд░ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрдЧреАред
рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
expect(api()).toEqual([]) // api without magic provides no items
it('api without magic provides no items', () => expect(api()).toEqual([]))
test('api without magic provides no items', () => expect(api()).toEqual([]))
expect(api()).toHaveNoItems()
expect(api(), 'api without magic provides no items').toEqual([])
expect(api()).because('api without magic provides no items').toEqual([])
since('api without magic provides no items').expect(api()).toEqual([]))
because('api without magic provides no items').expect(api()).toEqual([]))
jest.debug('api without magic provides no items'); expect(api()).toEqual([]))
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрд┐рдЫрд▓рд╛ .because()
рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдкрд╣рд▓реЗ рд╕рдореВрд╣ рдореЗрдВ рд╕рднреА рдЪрд╛рд░ рд╡рд┐рдХрд▓реНрдк рдЖрдЬ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк (рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдПрдХ рдХреЛрдб рдлреНрд░реЗрдо) рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЙрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░ рдПрдХ рдХрд╕реНрдЯрдо рдорд┐рд▓рд╛рдирдХрд░реНрддрд╛ (рд╡рд┐рдХрд▓реНрдк 4) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдЖрдВрджреЛрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреНрдпрд╛ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рджреВрд╕рд░реЗ рд╕рдореВрд╣ рдореЗрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЖрдХрд░реНрд╖рдХ рдХреНрдпрд╛ рд╣реИ? рджреВрд╕рд░рд╛ рд╕рдореВрд╣ рдХреНрдпрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдореИрдЪрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд░рдЦрд░рдЦрд╛рд╡ рдХреЛ рд╕рд╣реА рдард╣рд░рд╛ рд╕рдХрддрд╛ рд╣реИ (рдПрд╕рд┐рдВрдХ рдореИрдЪрд░реНрд╕, рдПрд╕рд┐рдореЗрдЯреНрд░рд┐рдХ рдореИрдЪрд░реНрд╕, рд╕реНрдкрд╛рдИ рдореИрдЪрд░реНрд╕, рдереНрд░реЛ рдореИрдЪрд░реНрд╕, рдкреНрд░реЙрдорд┐рд╕ рдореИрдЪрд░реНрд╕ рдФрд░ рдХрд╕реНрдЯрдо рдореИрдЪрд░реНрд╕ рдореЗрдВ)?
рдирдорд╕реНрддреЗ,
рдЖрдкрдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдорд┐рд▓реЗ рд╣реИрдВ:
рдкрд╣рд▓реЗ рд╕рдореВрд╣ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдЕрднрд┐рдХрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк it
рдФрд░ test
рдкрд░ рдХреЙрд▓ рдХреЛ рдиреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓реВрдк рдореЗрдВ рдирдП рдкрд░реАрдХреНрд╖рдг рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХреЗред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рди рдХрд┐ рдЕрднрд┐рдХрдерди ред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдореИрдВ 1000 рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд░рдгреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдкрд░ рдХреБрдЫ рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдпрд╣ рдкрд░реАрдХреНрд╖рдг рд╕рд╛рд░рд╛рдВрд╢реЛрдВ рдХреЛ рдлреБрд▓рд╛ рджреЗрдЧрд╛ред
рдЪреВрдВрдХрд┐ рдЙрди рдЧрддрд┐рд╢реАрд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдЕрднреА рднреА рджреБрд░реНрд▓рдн рд╣реИрдВ, рдЖрдИрдПрдордУ рд╣рдореЗрдВ рдЙрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд░рдЦрд░рдЦрд╛рд╡ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдХрд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ because/since
рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреНрдпрд╛рджрд╛рддрд░ expect
рдХреЛ try/catch
рдореЗрдВ рд▓рдкреЗрдЯреЗрдЧрд╛ рдЬреЛ рд╕рдВрджреЗрд╢ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддрд╛ рд╣реИ?
jest.debug
рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ, рдореЗрд░реЗ рд▓рд┐рдП рдбрд┐рдмрдЧрд┐рдВрдЧ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдкрд░реАрдХреНрд╖рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╛рд╕ рд╣реЛ рдЬрд╛рдПрдВ
"рдЕрдВрддрд┐рдо рддрд░реНрдХ" рд╡рд┐рдХрд▓реНрдк рднреА рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ expect
рддрд░реНрдХреЛрдВ рдХреА рдПрдХ рдЪрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
рдореИрдВ рдХрд┐рд╕реА рднреА рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдБред рдореБрдЭреЗ рдмрд╕ рдлреАрдЪрд░ рдЪрд╛рд╣рд┐рдПред рдореИрдВ jest.debug
рдПрдкреАрдЖрдИ рдкрд░ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдРрд╕рд╛ рд╣реИ рдЬреЛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЪрд╛рд╣рд┐рдПред
@kentcdodds рдЪрд╛рд░ рдореМрдЬреВрджрд╛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
@ рдПрд░рд┐рдХ-рдмреНрдпреВрд░рд▓ рдХреНрдпрд╛ рдЖрдкрдиреЗ test.each
рдФрд░ describe.each
рдХреЛ рдЬреЗрд╕реНрдЯ 23 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рд╣реИ (рдЬреЗрд╕реНрдЯ <23 рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз)?
рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдХрд╣рд╛, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВред рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕реБрд╡рд┐рдзрд╛ рдореМрдЬреВрдж рд░рд╣реЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рд╡рд░реАрдпрддрд╛ рдХреЗ рдХреНрд░рдо рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рд╣реЛрдЧрд╛:
expect(api(), 'api without magic provides no items').toEqual([])
because('api without magic provides no items').expect(api()).toEqual([]))
since('api without magic provides no items').expect(api()).toEqual([]))
expect(api()).because('api without magic provides no items').toEqual([])
jest.debug('api without magic provides no items'); expect(api()).toEqual([]))
(test|describe).each
рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рд╣реА рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпрд╛рдВ/рджрд╛рд╡рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЖрдЬ рдЪрд╛рд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдореМрдЬреВрдж рд╣реИ:
expect(api()).toEqual([]) // api without magic provides no items
it('api without magic provides no items', () => expect(api()).toEqual([]))
test('api without magic provides no items', () => expect(api()).toEqual([]))
expect(api()).toHaveNoItems()
рдЗрдирдореЗрдВ рдЧрд▓рдд рдХреНрдпрд╛ рд╣реИ? рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд _new_ рд╕рдорд╛рдзрд╛рди рдЗрди рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреЗрд╡рд▓ рдорд╛рдореВрд▓реА рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛ рдХреБрдЫ рд╣реИ рдЙрд╕рд╕реЗ рд╡реЗ рдХреНрдпрд╛ рд▓рд╛рдн рд▓рд╛рддреЗ рд╣реИрдВ рдЬреЛ рд░рдЦрд░рдЦрд╛рд╡ рд▓рд╛рдЧрдд рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рддреЗ рд╣реИрдВ?
@rickhanlonii рдЕрдЪреНрдЫрд╛ рдореБрдЭреЗ test.each
рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рдерд╛, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдорд╣рд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рддреАрд╕рд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рд╕рд░рдгреА рд╕реЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкрд░реАрдХреНрд╖рдгред
рддреЛ рдЗрд╕рдиреЗ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╕реВрдЪреАрдмрджреНрдз рджреВрд╕рд░рд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛: рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╡рд┐рдлрд▓рддрд╛ рд╕рдВрджреЗрд╢, рдЬреЛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЛ рддреЗрдЬрд╝ рдХрд░ рджреЗрдЧрд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдирд╣реАрдВ рд╣реИрдВ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝реАрд▓реНрдб рдорд╛рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдВрдкреВрд░реНрдг рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд┐рдлрд▓рддрд╛ рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдпрд╣ рд╡реИрдз рдЖрдИрдПрдордУ рд╣реИ, рдЬреЛ рдХреБрдЫ рднреА рд▓реЗрдЦрди рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдорд╛рдореВрд▓реА рдпрд╛ рдереЛрдбрд╝рд╛ рдмреЗрдорд╛рдиреА рд╣реЛред рдЖрдЦрд┐рд░рдХрд╛рд░ рд╣рдо рджреЛрдиреЛрдВ it
рдФрд░ test
рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдЕрдВрддрд░ рди рд╣реЛ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдЖрд░рд╛рдо рдХреЗ рд▓рд┐рдП рд╣реИред
рдпрд╣ рдорд╛рдореВрд▓реА рд╣реИ рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд┐рдд (рдХреЛрдИ рджрдВрдб рдирд╣реАрдВ) рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдзрд╛рдЧрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: it
рдпрд╛ test
рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдЕрдиреНрдп рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рдирд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдирд╛рдо рдПрдХ рд╡реИрдз рд╕рдорд╛рдзрд╛рди рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдЬрдм рдореЗрд░рд╛ рдорддрд▓рдм рдПрдХ рджрд╛рд╡рд╛ рдмрдирд╛рдирд╛ рд╣реИ . рдореИрдВрдиреЗ рдХрднреА рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рдерд╛ рдпрджрд┐ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣ рдкрд╛рдЧрд▓ рд╣реИред рдЙрдореНрдореАрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ рджреВрд╕рд░рд╛, рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВ ()ред рд╣рдордореЗрдВ рд╕реЗ рдЬреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡реЗ (рдЪреБрдирд┐рдВрджрд╛) рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЬреЛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд╡реЗ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
рдореЛрдЪрд╛ рдпрд╣ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣рд╛ рд╣реИ ... рдпрд╣ рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╡рд░реНрд╖реЛрдВ рдкрд╣рд▓реЗ рдЬреИрд╕реНрдореАрди рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдерд╛ (рджреВрд╕рд░рд╛ рдмреЗрд╣рддрд░ рдЯрд╛рдЗрдорд░ рдордЬрд╛рдХ рдХрд░ рд░рд╣рд╛ рдерд╛ред) рдЕрдЧрд░ рдореБрдЭреЗ рд░рд┐рдПрдХреНрдЯ рдмреИрдВрдбрд╡рд╛рдЧрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдерд╛, рддреЛ рдореИрдВ рдЬреЗрд╕реНрдЯ рдпрд╛ рдХрд┐рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЕрдиреНрдп рдЬреИрд╕реНрдореАрди рд╡реНрдпреБрддреНрдкрдиреНрдиред
рддреНрд░реБрдЯрд┐ рдкрд░ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдХрдИ рдЕрдиреНрдп рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдореЗрдВ рдПрдХ рд╕рдореНрдореЗрд▓рди рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдЬреЗрд╕реНрдЯ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрдХрд░ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдерд╛ред рдореБрдЭреЗ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдмрд╣реБрдд рд╕реЗ рдЙрдкрдпреЛрдЧреА рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓реЗ рд╣реИрдВ (рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж), рд▓реЗрдХрд┐рди рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓рддрд╛ рдкрд░ рдПрдХ рдХрд╕реНрдЯрдо рддреНрд░реБрдЯрд┐ рдореБрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рдЬреЛрдбрд╝рдирд╛ рдЬреЗрд╕реНрдЯ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЬреЛрдбрд╝рд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЙрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧрд╛ рдЬреЛ рдЕрдиреНрдп рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ (рдЧреИрд░-рдЬреЗрдПрд╕ рд╕рд╣рд┐рдд) рдХреЗ рд▓рд┐рдП рдЬреЗрд╕реНрдЯ рдкрд░ рд░реИрдВрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
@mattphillips рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рд▓реИрдВрдб рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдореМрдЬреВрдж рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЬреЗрд╕реНрдЯ-рдЪреЗрди рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП expect
. рдХрд╛ рджреВрд╕рд░рд╛ рддрд░реНрдХ
рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдЬреЗрдПрд╕ рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдореЗрдВ рдпрд╣ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рдорд╛рдирдХ рд╣реИред рдЬреЗрд╕реНрдЯ рдореЗрдВ рдЗрд╕реЗ рди рдкрд╛рдХрд░ рдмрд╣реБрдд рдирд┐рд░рд╛рд╢рд╛ рд╣реБрдИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрдкрдиреЗ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдПрдХ рдХрд╕реНрдЯрдо рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрддреЗ рд╣реИрдВред
@SimenB рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдореИрдВрдиреЗ рдЖрдЬ рд╕реБрдмрд╣ рд╣реА рдЖрдкрдХрд╛ рд╕рдВрджреЗрд╢ рджреЗрдЦрд╛!
рд╣рд╛рдВ рдпрд╣ рдпреВрдЬрд░рд▓реИрдВрдб рдореЗрдВ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдореИрдВрдиреЗ рдЕрднреА рдЗрд╕реЗ рдЦрдЯрдЦрдЯрд╛рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ jest-expect-message
https://github.com/mattphillips/jest-expect-message рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИ
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ: рдореБрд╕реНрдХрд╛рди:
рдмрдврд╝рд┐рдпрд╛, рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
@cpojer
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЗрдВрдЬреАрдирд┐рдпрд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо рдЙрдирдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХрдард┐рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдХреЗрд╡рд▓ рдмрджрддрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред
рджреЛ рдЪреАрдЬрд╝реЗрдВ:
рдореИрдВрдиреЗ рдЬреЗрд╕реНрдЯ рдореЗрдВ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореЛрдЪрд╛/рдЪрд╛рдИ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЯреЗрдк рдХрд╛ рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛, рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдбреАрд▓ рдмреНрд░реЗрдХрд░ рд╣реИред рдХрд╕реНрдЯрдо рд╕рдВрджреЗрд╢ рд╕рдорд░реНрдерди рдХреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛?
рдХрд╕реНрдЯрдо рдореИрдЪрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдирд╛ред рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдЖрдк рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рддрд░реНрдХ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рдереЗ: "рдЗрдВрдЬреАрдирд┐рдпрд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред"
рдореБрдЭреЗ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдЦреЛрд▓рдирд╛ рдФрд░ рд▓рд╛рдЗрди рдирдВрдмрд░ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдУрдкреА рдореЗрдВ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдЬреЛ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рд╣реИ рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрдВрджрд░ рдПрдХ рд▓реВрдк рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдирдо рдХреЗ рд╣рд░ рдореВрд▓реНрдп рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣:
it("Should contain at least one word of every wordType", () => {
for (const wordType of wordTypes) {
expect(words.find((word) => word.wordType === wordType)).toBeTruthy();
}
});
рдЕрдЧрд░ рд╡рд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рд╡рд░реНрдб рдЯрд╛рдЗрдк рдорд╛рди рд╡рд┐рдлрд▓ рд╣реБрдЖред
рдореЗрд░рд╛ рдХрд╛рдо-рдЖрд╕рдкрд╛рд╕ рдЙрд╕ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛ рдерд╛ рдЬрд┐рд╕рдореЗрдВ рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо (рдпрд╛рдиреА рд╕рддреНрдп) рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрджрд┐ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЬреЗрд╕реНрдЯ рдЙрд╕ рд╕рдВрджреЗрд╢ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред
expect(`${wordType} ${!!words.find((word) => word.wordType === wordType)}`).toEqual(`${wordType} ${true}`);
рдЬреЗрд╕реНрдЯ рдЗрд╕реЗ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ ...
expect(received).toEqual(expected)
Difference:
- Expected
+ Received
- 6 true
+ 6 false
... рдЬреЛ рдореБрдЭреЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рд╡рд░реНрдб рдЯрд╛рдЗрдк 6 рдерд╛ред
рдпрд╛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рд░реВрдк рд╕реЗ рдХреБрдЫ рдРрд╕рд╛ ...
if (!words.find((word) => word.wordType === wordType)) {
expect(`Didn't find a word with wordType '${wordType}'`).toEqual(null);
}
@cwellsx test.each
рдХреЗ рд╕рд╛рде рдкреИрд░рд╛рдореАрдЯрд░рдпреБрдХреНрдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдЗрд╕ рддрд░рд╣ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдкреНрд░рдХрд╛рд░ рдПрдХ рд╡рд░реНрдгрдирд╛рддреНрдордХ рд╢реАрд░реНрд╖рдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдкрд░реАрдХреНрд╖рдг рд╣реЛрдЧрд╛ (рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░)
рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛:
test("compare ArrayBufferCursors", () => {
const orig: ArrayBufferCursor;
const test: ArrayBufferCursor;
expect(test.size).toBe(orig.size);
while (orig.bytes_left) {
expect(test.u8()).toBe(orig.u8());
}
});
рдЕрднреА рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ ArrayBufferCursor рдореЗрдВ рдХреБрдЫ рдмрд╛рдЗрдЯ рдЧрд▓рдд рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рд╣реИред рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рд╕реЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧреАред рд╢реБрдХреНрд░ рд╣реИ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдиреЗ рдпрд╣рд╛рдВ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡реЗ рд╕рднреА рдмрджрд╕реВрд░рдд рдФрд░ рдзреАрдореЗ рд╣реИрдВред
@rickhanlonii , рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдордЬрд╛рдХ рдХреА рд░рдЦрд░рдЦрд╛рд╡ рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рдХрд▓реНрдк рдЬреЛ рдЖрдк рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рджреЗрддреЗ рд╣реИрдВ, рдЕрдиреНрдп рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд░рдЦрд░рдЦрд╛рд╡ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд░ рдореИрдВ toEqual
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рджрд╛рд╡реЗ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рдЕрдиреНрдпрдерд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рдПрдХ рдХрд╕реНрдЯрдо рдореИрдЪрд░ рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ ?!
рдЬрдмрдХрд┐ рджреЛрд╣рд░рд╛рд╡ рд╡рд╛рд▓реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ it.each
рдЙрдкрдпреЛрдЧреА рд╣реИрдВ, рдПрдХ рджрд╛рд╡реЗ рдкрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрдб рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд░реА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдЪрд░реНрдЪрд╛ рдФрд░ jest-expect-message
рдЙрднрд░рдирд╛ рдореБрдЭреЗ рдЬреИрд╕реНрдореАрди рдореЗрдВ beforeAll
рдореБрджреНрджреЗ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИ...
рдореИрдВ рдпрд╣рд╛рдВ рдУрдкреА рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдЧрд▓рдд рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдореИрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд▓рд╛рдпрд╛ рдерд╛, рдЙрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рдзрд╛рд░рдг try / catch
рдФрд░ рд░реИрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ jest.expect
ред рдореИрдВ рдХреЗрд╡рд▓ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрдкреВрд░реНрдгрддрд╛ рдХреЛ рд▓реЙрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬрд┐рдирдХреА рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА рдмрдирд╛рдо рдЬреЛ рдореБрдЭреЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдИ рдереА + рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рд▓реЙрдЧ рдЬреЛ рдорд╣рддреНрд╡ рдХреЛ рд╕рдордЭрд╛рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдЗрд╕реЗ рдЖрдк рдЬреЛ рдХреБрдЫ рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдХрд╛ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
in some test utility file...
const myExpect = (expectFn, errorCallback) => {
try {
expectFn();
} catch (err) {
errorCallback();
throw new Error(err);
}
};
// in the actual test suite...
const context = { hello: "world", results, expected };
myExpect(
() => expect(results).toEqual(expected),
() => console.error("[Error] -- context:", JSON.stringify(context))
);
+1
рдирдорд╕реНрддреЗ, рдореБрдЭреЗ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рднреА рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд▓рдЧреЗрдЧреАред рдпрд╣ рдореЗрд░реЗ рдЬреАрд╡рди рдХреЛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧрд╛ред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЗрд╕ рдЪрд░реНрдЪрд╛ рдФрд░ рдЗрд╕ рднрдВрдбрд╛рд░ рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫрд╛ рдФрд░ рдЕрд░реНрдердкреВрд░реНрдг рд╣реЛрдЧрд╛:
рдЙрдкрдпреЛрдЧ
because
рдПрдХ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдЕрд░реНрдердкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИредрдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдореИрдВ
since
рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдПрдХ рдкреАрдЖрд░ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВред