Jsdom: рдордЬрд╝рд╛рдХ: рд╕реБрд░рдХреНрд╖рд╛ рддреНрд░реБрдЯрд┐: рд╕реНрдерд╛рдиреАрдп рднрдВрдбрд╛рд░рдг рдЕрдкрд╛рд░рджрд░реНрд╢реА рдореВрд▓ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рдЬреБрд▓ре░ 2018  ┬╖  80рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: jsdom/jsdom

рдЬрдм рдореИрдВ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЗ рд╕рд╛рде jest рдЪрд▓рд╛рддрд╛ рд╣реВрдВред рдЬрдм рдореИрдВ рдкреИрдХреЗрдЬ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдХреЛрдИ рд╕реНрдерд╛рдиреАрдп рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рдареАрдХ рдХрд░реБрдВ?

 SecurityError: localStorage is not available for opaque origins

      at Window.get localStorage [as localStorage] (node_modules/jsdom/lib/jsdom/browser/Window.js:257:15)
          at Array.forEach (<anonymous>)


working as intended

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@gokulkrishh рдореИрдВрдиреЗ рдЗрд╕реЗ http://localhost/ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдорд╛рдиреНрдп рдпреВрдЖрд░рдПрд▓ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рд╕рднреА 80 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдиреАрдЪреЗ рджреА рдЧрдИ рдЪрд░реНрдЪрд╛ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢:

  • рд╕рдорд╛рдзрд╛рди рдЖрдкрдХреЗ jsdom рдХреЗ рд▓рд┐рдП рдПрдХ URL рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рд╡реЗрд╢ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред " about:blank " рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ URL, рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдЧрд╛ред
  • рдореВрд▓ рдХрд╛рд░рдг рдЕрдХреНрд╕рд░ рд╕рднреА jsdom рдЧреБрдгреЛрдВ рдкрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд▓реВрдк рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реИ; рднрд▓реЗ рд╣реА рдЖрдк рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛ рдХрднреА рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рднреА рдЖрдк рдЬрд┐рд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдпрд╛ рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ, рд╡рд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ "рдЙрдкрдпреЛрдЧ" рдХрд░ рд░рд╣рд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рд▓реВрдкрд┐рдВрдЧ-рдПрдВрдб-рдХреЙрдкреА рддрдХрдиреАрдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрд╕рдорд░реНрдерд┐рдд рд╣реИ , рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдорд╛рдореВрд▓реА рд░рд┐рд▓реАрдЬ рдореЗрдВ рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рд╕рд╡рд╛рд▓ рдкрд░ рдиреАрдЪреЗ рджреА рдЧрдИ рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдЯреНрд░рд╛рдВрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдПрдХ "рдмреНрд░реЗрдХрд┐рдВрдЧ рдЪреЗрдВрдЬ" рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдЧрд┐рдЯрд╣рдм рдХреА "рдЕрдзрд┐рдХ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рджреЗрдЦреЗрдВ" рд╕реБрд╡рд┐рдзрд╛ рджреНрд╡рд╛рд░рд╛ рдЫреБрдкрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдордп рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд░рд╛рд╕реНрддрд╛ рд╣реИред рдирдИ рд╡реЗрдм рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП jsdom рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реИ; рдпрд╣ рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИред

рдЖрд╢реНрд░рд┐рддреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЖрд╢реНрд░рд┐рддреЛрдВ рдХреЗ рд▓рд┐рдП, рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рд╡реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рднрд▓реЗ рд╣реА рдРрд╕реЗ рдЖрд╢реНрд░рд┐рдд рдореМрдЬреВрдж рд╣реЛрдВ, jsdom рдХреЛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреА-рдЫреЛрдЯреА рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдирд╣реАрдВ рдЪреВрдХрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣рд╛рдВ рд╕реНрдерд┐рддрд┐ рдЗрддрдиреА рд╡рд┐рдХрдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реА рд▓рдЧрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдХрд┐рд╕реА рдХреЛ рднреА рдЖрдкрддреНрддрд┐рдЬрдирдХ рдЬреЗрд╕реНрдЯ рдХреЛрдб рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддреЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдПрдХ рдСрдкрд░реЗрд╢рди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ jsdom рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рдареНрдпрдХреНрд░рдо рд╕реЗ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЬреЛ рд╡реЗрдм рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЬреЛ рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдХрдард┐рди рд╕реНрдерд┐рддрд┐ рд╣реИ, рдЖрдкрдХреА рдЦреБрдж рдХреА рдХреЛрдИ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рдмрд╛рддрдЪреАрдд рд╕реЗ рдХрд┐ рдЖрдкрдХреА рдкреНрд░рддреНрдпрдХреНрд╖ рдирд┐рд░реНрднрд░рддрд╛ (рдПрдмреА) рдЖрдкрдХреА рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд░рд╣реА рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЬреЗрд╕реНрдЯ рдХреЗ рдмрдЧреНрдЧреА рдХреЛрдб рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╕реНрддрд░ рдкрд░ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрдЬрд╛рдп рдПрдХ рдЖрд╢реНрд░рд┐рдд рдХреА рдмрдЧ рдХреЗ рдХрд╛рд░рдг рд╕рднреА jsdom рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗред

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдУрдкреА рдХрд╛ рдореВрд▓ рдЙрддреНрддрд░:

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ URL рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк, рдпрд╛ рд╢рд╛рдпрдж рдЬреЗрд╕реНрдЯ, window.localStorage ред рдЬреЗрд╕реНрдЯ рдЕрдиреБрд░рдХреНрд╖рдХ рд╕рд░реНрд╡реЛрддреНрддрдо рд╕реБрдзрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╕реБрдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдЬреЗрд╕реНрдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ URL рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╣рд╛рд▓рд┐рдпрд╛ рдореБрджреНрджрд╛ рд╣реИ рдЬреЛ 11.12.0 рд╕рд╛рде рдкреЙрдк рдЕрдк рд╣реБрдЖ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред jest рд╕рд╛рде enzyme рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдпрд╣реА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВред

рд╣рд╛рдВ, рдореБрдЭреЗ 11.11.0 рд╕реЗ 11.12.0 рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреЗ рд▓рдЧреАред рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ testURL рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЬрд╛рддреА рд╣реИред

@ рдмреЗрди-рдореИрдХрд░реНрдирди рд╣рд╛рдп, рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдиреЗ рдХреНрдпрд╛ рдпреВрдЖрд░рдПрд▓ рджрд┐рдпрд╛ рд╣реИ ??

@gokulkrishh рдореИрдВрдиреЗ рдЗрд╕реЗ http://localhost/ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдорд╛рдиреНрдп рдпреВрдЖрд░рдПрд▓ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╢рд╛рдпрдж рдПрдВрдЬрд╛рдЗрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдВрдЬрд╛рдЗрдо рд╡рд╣ рдХрд╛рдо рдХрд░рддрд╛

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдЯреВрдЯ рдЧрдпрд╛ :(

@ рдмреЗрди-рдореИрдХрд░реНрдирди рдзрдиреНрдпрд╡рд╛рдж

рдЗрд╕рдХрд╛ рдЕрдиреБрднрд╡ рднреА рдХрд░ рд░рд╣реЗ рд╣реИрдВред

https://github.com/jsdom/jsdom/blob/23d67ebec901b3471b84e63f58a96b51a36f3671/lib/jsdom/browser/Window.js#L255

("+1" рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╕реНрдкреИрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛; рд╕рдорд╕реНрдпрд╛ рдереНрд░реЗрдб рдореЗрдВ рд╕рднреА рдХреЛ рдИрдореЗрд▓ рдХрд░рдирд╛ рд╕рд╣рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред)

рдХреНрд╖рдорд╛ рдпрд╛рдЪрдирд╛ред рдмрд╕ рдорджрдж рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

testURL рдХреЛ jestConfig рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ @ ben-mckernan рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдерд╛ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ред

рдФрд░ рд╣рдо рдПрдВрдЬрд╛рдЗрдо рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЕрдЧрд░ рдпрд╣ рдЖрдкрдХреЗ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рдРрдк рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ "рдлрд╝рд╛рдЗрд▓: /" рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдХрд╛рдо рднреА рдХрд░рддрд╛ рд╣реИред

@miamollie рдореИрдВрдиреЗ @ рдмреЗрди-рдореИрдХрд░реНрдирди рд╕реБрдЭрд╛рд╡ рдХреЗ рдЕрдиреБрд╕рд╛рд░ testURL рдЬреЛрдбрд╝рд╛ (рдЬреЗрд╕реНрдЯ + рдПрдВрдЬрд╛рдЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдПрдВрдЬрд╛рдЗрдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред jest-environment-jsdom рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рддреНрд░реБрдЯрд┐ рдЬреЛ jsdom рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ)ред рдЙрд╕рдХреЗ рдХрд╛рд░рдг рдореЗрд░реА рдХреБрдЫ рдЕрдиреНрдп рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓реЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣реА рд╣реИрдВред рд╕рд┐рд░реНрдл рдЖрдкрдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдПред рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдореЗрд░реЗ рд╕реЗ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (TestURL рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред

@domenic рдореИрдВ рдХреЗрд╡рд▓ рдордЬрд╛рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рддреЛ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдПрдВрдЬрд╛рдЗрдо рдореБрджреНрджрд╛ рд╣реИред

@gokulkrishh рд╣рд╛рдБ, рд╡рд╣реА, рдЗрд╕рдиреЗ

@ рдмреЗрди-рдореИрдХрд░реНрдирди рд╕рдорд╛рдзрд╛рди рдиреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ред рдзрдиреНрдпрд╡рд╛рдж!

@ рдмреЗрди-рдореИрдХрд░реНрдирди рдореИрдВ рдПрдХ рдХреЛрдгреАрдп рд╕реЗрдЯрдЕрдк (рдЬреЗрд╕реНрдЯ-рдкреНрд░реАрд╕реЗрдЯ-рдХреЛрдгреАрдп рдХреЗ рд╕рд╛рде), рдПрдХ рд╣реА рдмрдЧ, рдПрдХ рд╣реА рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдЬреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рддреЛ рдпрд╣ рдПрдХ рдПрдВрдЬрд╛рдЗрдо рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЗрд╕реНрдЯ рдХреЛ рдЗрд╕реЗ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП testURL рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ (рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ about:blank )ред

@DcsMarcRemolt рдореИрдВ рд╕рд┐рд░реНрдл рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдбреАрдмрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред Jest рдирд┐рд░реНрднрд░рддрд╛ рдореЙрдбреНрдпреВрд▓ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ jest-environment-jsdom > - рдЕрдкрдиреЗ package.json рдореЗрдВ "jsdom": "^11.5.1" рдХреИрд░реЗрдЯ (^) рдЗрд╕ NPM рдХреА рд╡рдЬрд╣ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдХреЗ рд░реВрдк рдореЗрдВ jsdom 11.12.0 (рдЬреЛ рдЖрдЬ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реБрдЖ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ)ред рддреЛ рдпрд╣ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЯреВрдЯ рдЧрдпрд╛ред рдореБрджреНрджрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдордЬрд╛рдХ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдЗрд╕рдХрд╛ рдЦрдпрд╛рд▓ рд░рдЦреЗрдВред

рдореИрдВ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рджреГрд╢реНрдпрддрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реВрдВрдЧрд╛ред рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдбреЛрдорд┐рдирд┐рдХ рд╕реЗ рдкрд╣рд▓реА рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВред

package.json рдореЗрдВ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рдЬреЛрдбрд╝рдирд╛:
"testEnvironment": "node"
рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @ blue3printchris рдХреЛ рд╢реНрд░реЗрдпред

рдореИрдВ рдЕрдм рдЗрд╕ рдЕрджреНрдпрддрди рдХреЗ рдмрд╛рдж рд╕реЗ рд╕реНрдерд╛рдиреАрдп рд╕реНрдЯреЛрд░реЗрдЬ рдкрд░ JSDOM рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдФрд░ рдирдХрд▓реА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рдЪреВрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдерд╛, рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдиреБрдХрд╕рд╛рди рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛:

  • рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдкреВрд░реНрд╡рд╡рдд рдХрд░реЗрдВред
  • рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡рд╡рдд рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рд╕рдВрд╕реНрдХрд░рдг 11.12.1 рдЬрд╛рд░реА рдХрд░реЗрдВред
  • рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде рд╕рдВрд╕реНрдХрд░рдг 11.12.0 рдХреЛ рдЦреАрдВрдЪреЗ рдпрд╛ рд╣рдЯрд╛ рджреЗрдВред
  • рдпрджрд┐ рдирдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 12.0.0 рдХрд░реЗрдВ рдХрд┐ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдордп рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд░рд╛рд╕реНрддрд╛ рд╣реИред рдирдИ рд╡реЗрдм рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП jsdom рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реИ; рдпрд╣ рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИред

рдЖрд╢реНрд░рд┐рддреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЖрд╢реНрд░рд┐рддреЛрдВ рдХреЗ рд▓рд┐рдП, рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рд╡реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рднрд▓реЗ рд╣реА рдРрд╕реЗ рдЖрд╢реНрд░рд┐рдд рдореМрдЬреВрдж рд╣реЛрдВ, jsdom рдХреЛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреА-рдЫреЛрдЯреА рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдирд╣реАрдВ рдЪреВрдХрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣рд╛рдВ рд╕реНрдерд┐рддрд┐ рдЗрддрдиреА рд╡рд┐рдХрдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реА рд▓рдЧрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдХрд┐рд╕реА рдХреЛ рднреА рдЖрдкрддреНрддрд┐рдЬрдирдХ рдЬреЗрд╕реНрдЯ рдХреЛрдб рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддреЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдПрдХ рдСрдкрд░реЗрд╢рди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ jsdom рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рдареНрдпрдХреНрд░рдо рд╕реЗ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЬреЛ рд╡реЗрдм рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЬреЛ рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдХрдард┐рди рд╕реНрдерд┐рддрд┐ рд╣реИ, рдЖрдкрдХреА рдЦреБрдж рдХреА рдХреЛрдИ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рдмрд╛рддрдЪреАрдд рд╕реЗ рдХрд┐ рдЖрдкрдХреА рдкреНрд░рддреНрдпрдХреНрд╖ рдирд┐рд░реНрднрд░рддрд╛ (рдПрдмреА) рдЖрдкрдХреА рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд░рд╣реА рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЬреЗрд╕реНрдЯ рдХреЗ рдмрдЧреНрдЧреА рдХреЛрдб рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╕реНрддрд░ рдкрд░ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрдЬрд╛рдп рдПрдХ рдЖрд╢реНрд░рд┐рдд рдХреА рдмрдЧ рдХреЗ рдХрд╛рд░рдг рд╕рднреА jsdom рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗред

рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрджрд┐ рд╕рдорд╕реНрдпрд╛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЕрд╕рдорд░реНрдерд┐рдд рддрд░реАрдХреЗ рд╕реЗ jsdom рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╣реИ, рддреЛ рдпрд╣ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдПрдХ рд╕реЗрд╡рд░ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рд╣реИ рдФрд░ рдордЬрд╛рдХ рдХреЛ рдПрдХ рдкреИрдЪ рдЬрд╛рд░реА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЬрдм рд╕рднреА jsdom рдЧреБрдг рдЕрдзрд┐рдХ рдкрд╛рд╢рди рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдореЗрд░реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣рд▓, рдПрдХ рдХрд╛рд▓реА рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред


рдХреЛрдб

const { JSDOM } = require('jsdom');
const Node = require('jsdom/lib/jsdom/living/node-document-position');

// We can use jsdom-global at some point if maintaining these lists is a burden.
const whitelist = ['HTMLElement', 'Performance'];
const blacklist = ['sessionStorage', 'localStorage'];

function createDOM() {
  const dom = new JSDOM('', { pretendToBeVisual: true });
  global.window = dom.window;
  global.Node = Node;
  global.document = dom.window.document;
  // Not yet supported: https://github.com/jsdom/jsdom/issues/317
  global.document.createRange = () => ({
    setStart: () => {},
    setEnd: () => {},
    commonAncestorContainer: {
      nodeName: 'BODY',
      ownerDocument: document,
    },
  });
  global.navigator = {
    userAgent: 'node.js',
  };

  Object.keys(dom.window)
    .filter(key => !blacklist.includes(key))
    .concat(whitelist)
    .forEach(key => {
      if (typeof global[key] === 'undefined') {
        global[key] = dom.window[key];
      }
    });
}

module.exports = createDOM;


рдиреЛрдб рдЧреНрд▓реЛрдмрд▓ рдкрд░ jsdom рдЧреНрд▓реЛрдмрд▓реНрд╕ рди рдбрд╛рд▓реЗрдВ

рдЦреИрд░, рдореИрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдБред рдореБрдЭреЗ jsdom рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ, рдпрд╣ рд╕рд╛рд▓реЛрдВ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рд╕реБрдЭрд╛рдП рдЧрдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕рдорд╛рди рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реА рд╣реИред
Jsdom-global рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЦреИрд░, рдореИрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдБред рдореБрдЭреЗ jsdom рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг "рдЕрд╕рд▓реА рдмреНрд░рд╛рдЙрдЬрд╝рд░" рдХреЗ рдЕрдВрджрд░ рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдЙрд╕реА рддрд░рд╣ рд╕реЗ jsdom рдореЗрдВ рднреА рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВ - рдмрд╕ рд╡рд╣реА HTML рдкреНрд░рджрд╛рди рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╡реИрд╢реНрд╡рд┐рдХ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдХреЗ рдЖрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рдЕрдВрддрд░ рдкреЗрд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдПрдлрд╡рд╛рдИрдЖрдИ рдореИрдВ jsdom рд╕реЗ 11.12.0 рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЬреЗрд╕реНрдЯ рдирд╣реАрдВ, рдореЛрдЪрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рд░рд╣рд╛ рд╣реВрдВред

рдирдорд╕реНрддреЗ, рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдмрджрд▓рд╛рд╡ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдХреНрдпреЛрдВ рдкреЗрд╢ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗрд╡рд▓ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдЬреЛрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦрд╛ рд╣реИ, рдпрд╣ рдЙрддрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдЬрд┐рддрдирд╛:

const fib = require('./index');

test('Fib function is defined', () => {
  expect(typeof fib).toEqual('function');
});

test('calculates correct fib value for 1', () => {
  expect(fib(1)).toEqual(1);
});

screenshot 2018-07-30 21 10 39

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

//index.js, yes, only one line, no react no redux no enzyme 
function add(a, b) {}

рд╡реИрд╕реЗ, testURL рдФрд░ testEnvironment "рд╣реИрдХ" рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдореЗрд░рд╛ рдкреИрдХреЗрдЬ рд╣реИредрдЬреЗрд╕рди:

    "jest": {
        "testURL": "http://localhost/",
        "testEnvironment": "node"
    },

рддреЛ рдореЗрд░рд╛ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ рдХрднреА-рдХрднреА рд╣рдо рд╕рд┐рд░реНрдл рдПрдХ рдЯреЗрд╕реНрдЯ рд░рдирд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рд┐рд░реНрдл "рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ"

@ khmy2010 рдЖрдкрдХреЗ рдХреЛрдб рдФрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдЬреЗрд╕реНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рддрдирд╛ рд╡реЗ jsdom рдХрд░рддреЗ рд╣реИрдВред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрдирдХреЗ рднрдВрдбрд╛рд░ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдмрдирд╛рдПрдВред

рдСрдк рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдФрд░ рдпрд╣рд╛рдВ рд▓рдЧрднрдЧ рд╕рднреА (рдореИрдВ рдирд╣реАрдВ рд╣реВрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░)
рдПрдВрдЬрд╛рдЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛)ред рдпрджрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ рддреЛ рдореБрдЭреЗ рдордЬрд╛рдХ рдореЗрдВ рдПрдХ рдореБрджреНрджрд╛ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЦреЗрдж
рд╡рд╣ред

30 рдЬреБрд▓рд╛рдИ 2018 21:32 рдХреЛ, "рдЬрд╝рд┐рд░реЛ" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@khmy2010 https://github.com/khmy2010 рдЖрдкрдХреЗ рдХреЛрдб рдФрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
рдЬреЗрд╕реНрдЯ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рд╡реЗ jsdom рдХрд░рддреЗ рд╣реИрдВред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЙрдирдореЗрдВ рдПрдХ рдореБрджреНрджрд╛ рдмрдирд╛рдПрдВ
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА https://github.com/facebook/jest ред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/jsdom/jsdom/issues/2304#issuecomment-408864079 , рдпрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
рд╕реВрддреНрд░
https://github.com/notifications/unsubscribe-auth/AVrB3uOLy7l4JKbStKWPtGi0oHfAaQbYks5uLwrpgaJpZM4Vi8gP
.

рдпрджрд┐ рдЖрдк рдЕрдкрдирд╛ jsdom рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо url рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

const url = 'http://localhost';
const jsdom = new JSDOM('<!doctype html><html><body></body></html>, { url });

рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдПрдВрдЬрд╛рдЗрдо + рдореЛрдЪрд╛ @srodrigo . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

рдЗрд╕рдиреЗ рдореМрдЬреВрджрд╛ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛ред рдпрд╣ рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬрд╝ 12.0.0 рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рди рдХрд┐ рдЫреЛрдЯреА рд░рд┐рд▓реАрдЬрд╝ 11.12.0ред рдорд╛рдореВрд▓реА рд░рд┐рд▓реАрдЬ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрд░реЛрдХреНрдд рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЗрд╕реЗ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рдЬрдбрд╝ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдкрдбрд╝рд╛: --env=jsdom

рдореЗрд░реЗ jest.config.js рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝рдирд╛

testURL: 'http://localhost',

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓ рдХрд┐рдпрд╛ред рдзрдиреНрдпрд╡рд╛рдж!

(рдпрд╣рд╛рдБ рдЬреЗрд╕реНрдЯ рдЕрдиреБрд░рдХреНрд╖рдХред) рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬреЗрд╕реНрдЯ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ about:blank рд╕реЗ рдЙрджрд╛ localhost рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ?

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

рдЬреЗрд╕реНрдЯ рдЯреАрдо рдиреЗ testURL рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдЬреЛрдбрд╝рд╛ рд╣реИ: https://github.com/facebook/jest/pull/6792

@SimenB рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред

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

рд╣рдо рдХреБрдЫ рд╕реЗрдЯрдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ "setupTestFrameworkScriptFile" рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ (рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛) рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдФрд░ рд╕реЗрд╢рдирд╕реНрдЯреЛрд░реЗрдЬ (рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ) рдХреЗ рд▓рд┐рдП рдкреЙрд▓реАрдлрд╝рд┐рд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ window.localStorage = window.localStorage || { ... } , рдФрд░ sessionStorage рдХреЗ рд▓рд┐рдП рднреА рдпрд╣реА рд╣реИ, рдЬрд╣рд╛рдВ ... рдирдХрд▓реА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИред рдЕрдм рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдореИрдВ рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ ( window.localStorage = { ... } ) рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓ рджреВрдВред

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ sessionStorage.getItem рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди "testURL" рдХреЛ " http://localhost " рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЬреИрд╕рд╛ рдХрд┐ window.sessionStorage.getItem = jest.fn(); , рдлрд┐рд░ рднреА рдмрд╛рдж рдореЗрдВ expect(window.sesssionStorage.getItem).toHaveBeenCalled() рдпрд╣ рдХрд╣рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдирдХрд▓реА рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИред

рдЬрдмрдХрд┐ рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЬреЛрдбрд╝ рдПрдХ рдорд╛рдореВрд▓реА рд╕рдВрд╕реНрдХрд░рдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ, рдФрд░ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реИ, рдЬрдм рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдПрдХ рдорд╛рдирдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдФрд░ рдирдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдУрд╡рд░рд░рд╛рдЗрдб рдпрд╛ рдордЬрд╛рдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ _is_ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ .

рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рдкрд╛рдпрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкреИрдХреЗрдЬ рдореЗрдВ jsdom рдЬреЛрдбрд╝рдирд╛ рд╣реИред рдЬреЗрд╕рди рдФрд░ 11.11.0 рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рдпрд╣ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдмрд╛рдж рдореЗрдВ рдЬрдм рд╣рдо рдкреИрдХреЗрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рдо рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП рд▓реАрдЬ рдкрд░ рдпрд╣ рд╣рдореЗрдВ рдЕрдирдмреНрд▓реЙрдХ рдХрд░ рджреЗрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдб рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореЙрдХрд┐рдВрдЧ рдХреЛрдб, рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди jsdom рдореЗрдВ рдирд╣реАрдВ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдмрд╛рдж рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ рд╣рдо рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реЗ рдЬреНрдЮрд╛рди рдХреЗ рд▓рд┐рдП jsdom рдореЗрдВ рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рдирдХрд▓реА рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рд╣реИред

рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХреЗ рдмрд┐рд▓реНрдб рд╕рд░реНрд╡рд░ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдг рди рдЪрд▓рд╛рдПрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред

"рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХреЗ рдмрд┐рд▓реНрдб рд╕рд░реНрд╡рд░ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдг рди рдЪрд▓рд╛рдПрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред"

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреИрдХреЗрдЬ рдбреЗрд╡рд▓рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╕рдордп "^" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрдВрдж рдирд╣реАрдВ рдХрд░ рджреЗрддрд╛, рдпрд╛ рд╣рдо рдЕрдкрдиреЗ рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣рдЬрд╛рд░реЛрдВ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрджреНрдз рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдРрд╕рд╛ рдХрднреА рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдорд╢реАрди рд╕реЗ рджреВрд╕рд░реА рддрдХ рдХреБрдЫ рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рдПрдХ рдпрд╛ рджреЛ рд╕реНрддрд░ рдиреАрдЪреЗ рдереЛрдбрд╝рд╛ рдЕрдВрддрд░ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рдЙрди рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд╕рдЯреАрдХ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреА рдкреНрд░рддреНрдпрдХреНрд╖ рдирд┐рд░реНрднрд░рддрд╛ рд╣реИрдВред

"^" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ @mrobrian рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реИрдВред рдЕрдм рддрдХ рдХреА рд╕рдмрд╕реЗ рдкрд╛рдЧрд▓рдкрди рднрд░реА рдмрд╛рддред рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП npm рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

packge-lock.json рдбреЛрдореЗрдирд┐рдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб packge-lock.json рдФрд░ yarn.lock рдбрд┐рдЬрд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рддреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХреЛрдб-рд╕рдореАрдХреНрд╖рд╛ рдФрд░ рд╡рд┐рд▓рдп рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдХреНрд╕рд░ рдЖрдкрдХреЛ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛рдХрд░ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдареАрдХ рд╣реИ рдЕрдЧрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдмрд╣реБрдд рдмрд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░рд╛ .npmrc :

save-exact = true
package-lock = false

рдЗрд╕рдиреЗ рдореБрдЭреЗ рдЗрд╕ рдирдИ рд▓рд╛рдЗрди рдХреЛ package.json рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдорджрдж рдХреА:

"jest": {
    "verbose": true,
    "testURL": "http://localhost/"
  },

рдпрджрд┐ рдЖрдк jsdom рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ url рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИ

рдХреЙрдиреНрд╕реНрдЯ рдбреЛрдо = рдирдпрд╛ рдЬреЗрдПрд╕рдбреАрдУрдПрдо (``, {
рдпреВрдЖрд░рдПрд▓: "https://example.org/",
});

рдХреНрдпрд╛ рдЬреЗрд╕реНрдЯ рджреЗрд╡ рдЗрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рд╕реАрдПрд▓рдЖрдИ/рдиреЛрдб рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдм "testEnvironment": "node" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ ( localStorage рддреНрд░реБрдЯрд┐ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП) рдЬрдмрдХрд┐ рдкрд╣рд▓реЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА? рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ?

рдпрджрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмреЗрд╣рддрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ! рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдореЗрд░реА рджреЛрдиреЛрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИ рдЬреЛ рдЬреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ - рдХреБрдЫ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рджреЛ рд╕рд╛рдзрд╛рд░рдг рдЧреИрд░-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВред рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ jsdom/рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдЬреЗрд╕реНрдЯ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕рд╡рд╛рд▓ рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рд╣реА рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИ - jsdom рдПрдХ рдЕрд▓рдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИред рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдКрдкрд░ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдкрдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рд╣реИрдВред

рдкреИрдХреЗрдЬ.рдЬреЗрд╕рди

   ...
  "jest": {
    "testEnvironment": "node",
    "roots": [
      "test/javascript"
    ]
  },

рдЗрд╕рд╕реЗ рдореЗрд░рд╛ рдХрд╛рдо рдмрдирддрд╛ рд╣реИред

@ p8ul рд╕рд╣реА рдерд╛, " http://localhost " рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ (рдЬреЗрд╕реНрдЯ 23.5.0 рдХреЗ рдмрд╛рдж рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯ рдпреВрдЖрд░рдПрд▓, #6792 рджреЗрдЦреЗрдВ):

const dom = new JSDOM(``, {
url: "http://localhost",
});

рдореЗрд░реЗ рд▓рд┐рдП рдкреВрд░рд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЬреЛрдбрд╝рдиреЗ рдХреА рднреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ :

"testEnvironment": "node"

рдЬреЗрд╕реНрдЯ реирей.рел.реж рдореЗрдВ рдЕрдм рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрдзрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреА рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:

https://github.com/facebook/jest/issues/6766#issuecomment -412516712

@mica16 https://github.com/jsdom/jsdom/issues/2304#issuecomment -412663502 рдХреЗ рд╕рдорд╛рди

const dom = new JSDOM(``, {
  url: "http://localhost",
});

рдХреНрдпрд╛ рдЗрд╕ рддреНрд░реБрдЯрд┐ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред

рд╣рдо рдореЛрдЪрд╛/рдПрдВрдЬрд╛рдЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдореЗрдВ рдХреЛрдИ рдордЬрд╝рд╛рдХ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред

рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ --env node рд╕реЗрдЯ рдХрд░рдирд╛ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@gokulkrishh рдореИрдВрдиреЗ рдЗрд╕реЗ http://localhost/ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдорд╛рдиреНрдп рдпреВрдЖрд░рдПрд▓ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

"рд╕реНрдерд╛рди.href" рддрдм рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред :)

@domenic рдореИрдВ рд╢реАрд░реНрд╖ рдкрд░ рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгреА рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЬреЗрд╕реНрдЯ рджреЗрдЦрд░реЗрдЦ рд╕рдВрд╕реНрдХрд░рдг 23.5.0 рдореЗрдВ рдЗрд╕ рдмрдЧ рддрдп: https://github.com/facebook/jest/issues/6766#issuecomment -+рекрез,реирел,резрем,ренрезреи

рдореИрдВ рдЬреЗрд╕реНрдЯ-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП http://localhost testURL рдХреЛ http://localhost рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реВрдВред

рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдВрдЬреА рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ "jest": { "testURL": " http://localhost%26quot%3B/ },
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХреЗ рдмрдЬрд╛рдп рдЖрдИрдкреА-рдкреЛрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдЗрд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

npm audit рдЪрд▓рд╛рддреЗ рд╕рдордп рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред npm audit fix рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред

рдЪреВрдВрдХрд┐ рдпрд╣ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЬреЗрд╕реНрдЯ рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдЗрдП рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдмрд╣реБрдд рд╕рд╛рд░реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдпрд╛ рдпрджрд┐ рдЪреАрдЬреЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛ рдЧрдИ рд╣реИрдВред

"рдордЬрд╛рдХ": {
"рдХреНрд░рд┐рдпрд╛": рд╕рдЪ,
"testURL": " http://localhost/ "
}
рдЗрд╕ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдХреЛ package.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред

рдЖрдк рдЗрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╡рд╣рд╛рдВ jsdom рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ

``` рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ 1.6
/**

  • @ рдордЬрд╛рдХ-рдкрд░реНрдпрд╛рд╡рд░рдг рдиреЛрдб
    */

рдпрд╣ ('рдореЗрд░рд╛ рдкрд░реАрдХреНрд╖рдг', () => {
рдЙрдореНрдореАрдж (2 + 2)ред рдЯреВрдмреА (4);
});
```

рдореИрдВрдиреЗ рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛:

1) рдЗрд╕реЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЬреЛрдбрд╝реЗрдВ:

/**
 * @jest-environment node
 */

2) рдЗрд╕ рд╢реНрд▓реЛрдХ рдХреЛ package.json рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

"jest": {
    "testURL": "http://localhost/"
  }

рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ред

рдореИрдВрдиреЗ рдЗрд╕реЗ package.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдХрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛:

"jest": {
    "verbose": true,
    "testURL": "http://localhost/"
  }

@gokulkrishh рдореИрдВрдиреЗ рдЗрд╕реЗ http://localhost/ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдорд╛рдиреНрдп URL рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рдореИрдВ рдПрдХ рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рд╣реВрдБред рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ Jest.config.js рдореЗрдВ рдореИрдВрдиреЗ testURL рдХрд╣рд╛рдБ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ?

@haiphu рдХрд╣реАрдВ рднреА jest.config.js рдореЗрдВ рдиреАрдЪреЗ рдХреА рддрд░рд╣

{
"testURL": "http://localhost/"

// Your other config
}

рдореИрдВрдиреЗ рдиреАрдЪреЗ рдЕрдкрдиреЗ package.json рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдФрд░ рдпрд╣ рдЕрдм рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ :)

  "jest": {
    "testURL": "http://localhost/"
  },

рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХреНрдпреЛрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реА рддреНрд░реБрдЯрд┐ рд╡рд┐рднрд┐рдиреНрди рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реБрдИ рдереАред

рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╛рд░реНрди рд╡рд░реНрдХрд╕реНрдкреЗрд╕ + рд▓рд░реНрди рдХреЗ рд╕рд╛рде рдПрдХ рдореЛрдиреЛ-рд░реЗрдкреЛ рд╕реЗрдЯрдЕрдк рд╣реИред рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдкреИрдХреЗрдЬ рдореЗрдВ typescript@^3.3.3 рдерд╛ред рдореИрдВрдиреЗ рдПрдХ рдирдпрд╛ рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝рд╛ рдФрд░ рдирд╡реАрдирддрдо typescript@^3.5.3 ред рдЬрдм рдореИрдВрдиреЗ рдореМрдЬреВрджрд╛ рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдпрд╛, рддреЛ рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред

рдЕрдЧрд░ рдореИрдВ рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдПрдХ рд╣реА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реВрдВ - рдпрд╛ рддреЛ typescript@^3.3.3 рдпрд╛ typescript@^3.5.3 , рддреЛ рддреНрд░реБрдЯрд┐ рджреВрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдореБрдЭреЗ testURL рд╕рд╛рде рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдкрдбрд╝рд╛ред

@ tylerreece22 @gokulkrishh рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛! рдореИрдВ

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЬреЗрд╕реНрдЯ рдХрд╛ testURL рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд┐рд░реНрджреЗрд╢ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рджреЗрдЦреЗрдВ https://jestjs.io/docs/en/configuration#testurl -string

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕реАрдзреЗ jsdom рдкрд░ рд╡рд┐рдХрд▓реНрдк рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореЛрдЪрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп)ред рдЗрд╕реЗ рдЕрдкрдиреЗ setup.js рдореЗрдВ рд░рдЦреЗрдВ:

let jsdom = require('jsdom-global')(
    undefined,
    {
        url: "http://localhost"
    }
);

рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ .. рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ jsdom рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ .. рдореИрдВ рдХреБрдЫ рдиреЛрдб рдХреЗрд╡рд▓ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЬреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдлрд┐рд░ рднреА рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕реАрдЖрдИ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддреА рд╣реИ рдЬрдм рдЬреЗрд╕реНрдЯ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ ^11 рд░реЗрдВрдЬ рдХреЗ рднреАрддрд░ рдирд╡реАрдирддрдо рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ .. рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдиреНрдп рд▓реЛрдЧ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ .. рдЕрдм рддрдХ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ

рдпрджрд┐ рдЖрдк jsdom рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдк рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд┐рдЧ рдкреНрд░реЙрдкрд░реНрдЯреА testEnvironment рд╕реЗ node рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред ( testURL рдХреЛ рдЫреВрдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ)
https://jestjs.io/docs/en/configuration#testenvironment -string

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реБрдзрд╛рд░ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рднреА, рдпрд╣ new JSDOM('', { url: 'https://localhost' })

рдЗрд╕реЗ рдЕрдкрдиреЗ package.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ

"рдордЬрд╛рдХ": {
"рдХреНрд░рд┐рдпрд╛": рд╕рдЪ,
"testURL": " http://localhost/ "
}

рдпреВрдЖрд░рдПрд▓ рд╕реЗрдЯ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ... рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ .. рдХреНрдпрд╛ рдХреБрдЫ рдФрд░ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ?

рдпреВрдЖрд░рдПрд▓ рд╕реЗрдЯ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ... рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ .. рдХреНрдпрд╛ рдХреБрдЫ рдФрд░ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ?

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рдерд╛ред рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдХреЛрдб рдерд╛

const { JSDOM } = require('jsdom');
const jsdom = new JSDOM('<!doctype html><html><body></body></html>');

рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╣рдореЗрдВ URL рдХреЛ JSDOM рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдерд╛

const { JSDOM } = require('jsdom');
const jsdom = new JSDOM('<!doctype html><html><body></body></html>', {
  url: 'http://localhost/',
});

рдЗрд╕рд╕реЗ рдорд╛рдорд▓рд╛ рдареАрдХ рд╣реЛ рдЧрдпрд╛ред

рдпреВрдЖрд░рдПрд▓ рд╕реЗрдЯ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ... рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ .. рдХреНрдпрд╛ рдХреБрдЫ рдФрд░ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ?

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рдерд╛ред рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдХреЛрдб рдерд╛

const { JSDOM } = require('jsdom');
const jsdom = new JSDOM('<!doctype html><html><body></body></html>');

рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╣рдореЗрдВ URL рдХреЛ JSDOM рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдерд╛

const { JSDOM } = require('jsdom');
const jsdom = new JSDOM('<!doctype html><html><body></body></html>', {
  url: 'http://localhost/',
});

рдЗрд╕рд╕реЗ рдорд╛рдорд▓рд╛ рдареАрдХ рд╣реЛ рдЧрдпрд╛ред

рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдпреВрдЖрд░рдПрд▓ рдХреЛ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдбрд╛рд▓рдиреЗ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред url рдХреЛ de jsdom рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдбрд╛рд▓рдиреЗ рд╕реЗ рдЪрд╛рд▓ рдЪрд▓реАред

рдЬреЗрд╕реНрдЯ рдХреЛ реиреи рд╕реЗ реирем рдлрд┐рдХреНрд╕реНрдб рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред

рдмрд╕ рдЬреЗрд╕реНрдЯ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореИрдВ рд╡рд░реНрд╖ реирежреиреж рдореЗрдВ реирем.рел.реж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИ

рдЗрд╕реЗ рдЕрдкрдиреЗ package.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ

"рдордЬрд╛рдХ": {
"рдХреНрд░рд┐рдпрд╛": рд╕рдЪ,
"testURL": " http://localhost/ "
}

рд╡рд╣ testURL рдбрд┐рдлрд╝реЙрд▓реНрдЯ URL рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо Jest 26.x ред рдореБрдЭреЗ рд╡рд╣реА рдХрд░рдирд╛ рдерд╛ рдЬреЛ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

camelaissani picture camelaissani  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

potapovDim picture potapovDim  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Progyan1997 picture Progyan1997  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

JacksonGariety picture JacksonGariety  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

amfio picture amfio  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ