Cucumber-js: рдкреНрд░рд╕реНрддрд╛рд╡: рдХрдХрдбрд╝реА-рдЬреЗрдПрд╕ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рдПрдкреАрдЖрдИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 28 рдЬреВрди 2021  ┬╖  29рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: cucumber/cucumber-js

рдореБрд╕реАрдмрдд

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдХрдбрд╝реА-рдЬреЗрдПрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЖрд╡рд╢реНрдпрдХрддрд╛ рджреЛ рдХреЛрдгреЛрдВ рд╕реЗ рд╣реИ:

  • рдкрд░реАрдХреНрд╖рдг рдХрдХрдбрд╝реА-рдЬреЗрдПрд╕ - рд╕реАрд╕реАрдХреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣рдорд╛рд░реЗ рд╕реНрд╡реАрдХреГрддрд┐ рдкрд░реАрдХреНрд╖рдг
  • рдХрд╕реНрдЯрдо рдлреЙрд░реНрдореЗрдЯрд░реНрд╕ рдФрд░ рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг
  • рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдЬреЛ рдПрдХ рдврд╛рдВрдЪреЗ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдХрдбрд╝реА-рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реЗрд░реЗрдирд┐рдЯреА, рд╕реНрдЯреНрд░рд╛рдЗрдХрд░)

рдЬреИрд╕рд╛ рд╣реИ

рдЗрд╕ рд╕рдордп рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ Cli рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг strung-together argv input рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдмреЛрдЭрд┐рд▓ рд╣реИ рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдкрд░ рднреА

рдХрднреА-рдХрднреА (рд╕рдВрднрд╡рддрдГ рдЙрдкрд░реНрдпреБрдХреНрдд рдХреА рдХрдерд┐рдд рдирд╛рдЬреБрдХрддрд╛ рдХреЗ рдХрд╛рд░рдг) рдврд╛рдВрдЪреЗ рдХреЗрд╡рд▓ рдХрдХрдбрд╝реА-рдЬреЗрдПрд╕ рд╕реАрдПрд▓рдЖрдИ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдЦреЛрдЬрдиреЗ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░рддреЗ рд╣реИрдВред

Runtime рд╡рд░реНрдЧ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрди рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХреЙрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрдЪрд╛рд░ рдФрд░ рд╕рдорд░реНрдерди рдХреЛрдб рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рдкреНрд░рд╕реНрддрд╛рд╡

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рджреЛ рдШрдЯрдХ:

runCucumber

рдирдпрд╛ async рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд░рди-рдЗрди-рдкреНрд░реЛрд╕реЗрд╕ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпрд╛рдВ:

  • рдПрдХ рдЕрдЪреНрдЫреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╡рд╕реНрддреБ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ
  • рдЕрдЪрд╛рд░ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ, рд╕рдкреЛрд░реНрдЯ рдХреЛрдб рд▓реЛрдб рдХрд░рдиреЗ, рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдЪрд▓рд╛рдиреЗ, рдлреЙрд░реНрдореЗрдЯрд░реНрд╕ рдХреЛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯ рдХрд░рдиреЗ рдХрд╛ "рдХрд╛рдо" рдХрд░реЗрдВ
  • рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░реЗрдВ рдЬреЛ рдПрдХ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИ

рдпрд╣ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╣рдо рдХрдХрдбрд╝реА-рдЬреЗрдПрд╕ рдХреЛ "рд░реИрдкрд┐рдВрдЧ" рдХрд░рддреЗ рд╕рдордп рдлреНрд░реЗрдорд╡рд░реНрдХ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░реЗрдВрдЧреЗред рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВрдЧреЗред

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ Runtime рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рд╕реЗ рдмрд╛рд╣рд░ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдЪреАрдЬ рд╣реИред

рд╕реАрдПрд▓рдЖрдИ

рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ runCucumber "рдХреНрд▓рд╛рдЗрдВрдЯ"ред рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпрд╛рдВ:

  • рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдХреБрд▓ рд╡рд┐рдХрд▓реНрдк (argv, env vars, config рдлрд╛рдЗрд▓) ( рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВ)
  • рд╣рд▓ рдХрд┐рдП рдЧрдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде runCucumber рдХреЙрд▓ рдХрд░реЗрдВ
  • рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрдкрдпреБрдХреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ

рдпрд╣ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдкрд░ рдирд╣реАрдВ рд░рд╣реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдп / рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИ рдХрд┐ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдкрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдРрд╕реА рд╣реИ рдХрд┐ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдпрд╣ рдкрддрд╛ рдЕрдкрдиреЗ рдЖрдк рд╣реА рдкреИрдХреЗрдЬ рдореЗрдВ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИ, рдХреЗ рд░реВрдк рдЬреИрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдм рдПрдХ рдЖрдо рдкреИрдЯрд░реНрди рд╣реИ рдЬреЗрд╕реНрдЯ ред

рдпрд╣ рдбрд┐рдХреВрдкрд┐рдВрдЧ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдирдИ рд╕реАрдПрд▓рдЖрдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рдкреНрд░рд╢рд╕реНрдд рдХрд░рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рдЖрдВрддрд░рд┐рдХ рдореЗрдВ рдмреНрд▓реАрдб рдХрд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  • --gui рдХрдХрдбрд╝реА-рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП
  • --interactive TDD'ing рдХреЗ рджреМрд░рд╛рди рддреНрд╡рд░рд┐рдд рд▓рдХреНрд╖рд┐рдд рдкреБрди: рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП

рдЖрджрд┐

рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ (рд╕реАрдПрд▓рдЖрдИ рдФрд░ рдЕрдиреНрдп рджреНрд╡рд╛рд░рд╛ рдЙрдкрднреЛрдЬреНрдп) рдХреЛ рднреА рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдВрдЧреЗ:

  • рд╡рд┐рдХрд▓реНрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
  • i18nKeywords рдФрд░ i18nLanguages рд╕рдВрднрд╛рд▓рдирд╛

рдЯрд╛рдЗрдорд╕реНрдХреЗрд▓

рд╣рдо рдЗрд╕реЗ рдЖрдЧрд╛рдореА 8.0.0 рд░рд┐рд▓реАрдЬрд╝ рдкрд░ рд▓рдХреНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред рдореИрдВ рдЖрдЬ рдЗрд╕ рдкрд░ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред

breaking change enhancement

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

рдпрд╣ рдПрдХ рдРрд╕реЗ рд░рд┐рдкреЛрд░реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ?

formats: {
    stdout: './my-awesome-stryker-formatter',
    files: {
      'report.html': './my/fancy-reporter.js',
      'other-report.html': '@me/reporter-package',
    }
  },

(рдХреЗрд╡рд▓ рдПрдХ рдлреЙрд░реНрдореЗрдЯрд░ рд╕реНрдЯрдбрдЖрдЙрдЯ рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ)

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

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкреЗрдЬрд┐рдВрдЧ: @aslakhellesoy @charlierudolph @ @mattwynne @nicojs @jan-molak

рдореБрдЭреЗ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд╕рдВрдж рд╣реИ! рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рддрд░рд╣ рдПрдХ рдПрдкреАрдЖрдИ рдирдХрд▓реА-рдХрдХрдбрд╝реА рдХреЗ рд░рдирдХрдХрдбрд╝реА рдореЗрдВ

@davidjgoss - рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ!

рдЖрдкрдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╕рдордп рдХреИрд╕реЗ Serenity/JS рдХрдХрдбрд╝реА рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ - CucumberCLIAdapter
рдФрд░ рдпрд╣рд╛рдБ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ argv - CucumberOptions рдмрджрд▓рдиреЗ рдХрд╛ рддрд░реНрдХ рд╣реИред

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

рдЗрд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рдирд╛!

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

рдФрд░ рдЙрд╕рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП - рдЖрдЗрдП рдХреБрдЫ рдРрд╕рд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рд╕реЗ рдХрдХрдбрд╝реА-рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рдХреЗ рд▓рд┐рдП рднреА рдпрд╣ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдП:

рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рд╣реЛрдирд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВ ЁЯСН!

рдЕрдзрд┐рдорд╛рдирддрдГ рдореЗрд░реЗ рдкрд╛рд╕ cucumber-js рдХреЗ рд╕рдорд╛рди рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдлрд╛рдЗрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рднреА рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рдХрдХрдбрд╝реА-рдЬреЗрдПрд╕ рдХреЙрд▓ рдХреЗ рд╕рдЯреАрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдирдХрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

loadProfiles(directory = process.cwd()): Record<string, Profile>

StrykerJS рднреА custom_formatters API рдФрд░ eventBroadcaster рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдИрд╡реЗрдВрдЯ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ред рдХреНрдпрд╛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдореЗрдВ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ? рджреЗрдЦреЗрдВ: https://github.com/stryker-mutator/stryker-js/blob/03b1f20ed933d3a50b52022cfe363c606c2b16c5/packages/cucumber-runner/src/stryker-formatter.ts#L45 -L69

рдЕрдзрд┐рдорд╛рдирддрдГ рдореЗрд░реЗ рдкрд╛рд╕ рдХрдХрдбрд╝реА-рдЬреЗрдПрд╕ рдХреЗ рд╕рдорд╛рди рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдлрд╛рдЗрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рднреА рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рдХрдХрдбрд╝реА-рдЬреЗрдПрд╕ рдХреЙрд▓ рдХреЗ рд╕рдЯреАрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдирдХрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

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

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

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

рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдпрджрд┐ рдмрд╣реБрдд рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди-рд╡рд╛рдИред

рдореИрдВ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╛рд░реВрдк рдЬреИрд╕реЗ рдХрд┐ JSON, JavaScript, YAML рдпрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдореЗрдВ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП тЭдя╕ПтЭдя╕ПтЭдя╕П рдХрд░реВрдВрдЧрд╛ред JSON рдореЗрдВ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

.cucumber.json

{
  "default": {
    "requireModule": ["ts-node/register"],
    "require": ["support/**/*./ts"],
    "worldParameters": {
      "appUrl": "http://localhost:3000/",
    },
    "format": ["progress-bar", "html:./cucumber-report.html"]
  },
  "ci": {
    "requireModule": ["ts-node/register"],
    "require": ["support/**/*./ts"],
    "worldParameters": {
      "appUrl": "http://localhost:3000/",
    },
    "format": ["html:./cucumber-report.html"],
    "publish": true
  }
}

рдпрд╛, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░

.cucumber.js

const common = {
  "requireModule": ["ts-node/register"],
  "require": ["support/**/*./ts"],
  "worldParameters": {
    "appUrl": "http://localhost:3000/",
  }
}

module.exports = {
  default: {
    ...common,
    "format": ["progress-bar", "html:./cucumber-report.html"]
  },
  ci: {
    ...common,
    "format": ["html:./cucumber-report.html"],
    "publish": true
  }
}

рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд╕рд╛рде (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП dotenv рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛):

.cucumber.env

CUCUMBER_PROFILE_DEFAULT_REQUIREMODULE=ts-node/register
CUCUMBER_PROFILE_DEFAULT_REQUIRE=ts-node/register
CUCUMBER_PROFILE_DEFAULT_WORLDPARAMETERS_APPURL=http://localhost:3000/
CUCUMBER_PROFILE_DEFAULT_FORMAT=progress-bar,html:./cucumber-report.html
CUCUMBER_PROFILE_CI_REQUIREMODULE=ts-node/register
CUCUMBER_PROFILE_CI_REQUIRE=ts-node/register
CUCUMBER_PROFILE_CI_WORLDPARAMETERS_APPURL=http://localhost:3000/
CUCUMBER_PROFILE_CI_FORMAT=progress-bar,html:./cucumber-report.html
CUCUMBER_PROFILE_CI_PUBLISH=true

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

@aslakhellesoy рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛! рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдУрд╕реА рдкреНрд░рд╛рдкреНрдд рдХрд░реВрдВрдЧрд╛ рддрд╛рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рдареЛрд╕ рд╣реЛ, рдФрд░ рдЗрд╕рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдмрдирд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ (4.5 рд╕рд╛рд▓ рдФрд░ #751 рдкрд░ рдЧрд┐рдирддреА )

рд╕рдВрджрд░реНрдн #1004

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

рд╣рд╛рдБ, рдкреНрд▓рдЧрдЗрди рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдпрд╣ рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рдФрд░ рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред

рдореИрдВ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╛рд░реВрдк рдЬреИрд╕реЗ рдХрд┐ JSON, JavaScript, YAML рдпрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдореЗрдВ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП тЭдя╕ПтЭдя╕ПтЭдя╕П рдХрд░реВрдВрдЧрд╛ред JSON рдореЗрдВ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

рд╡рд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ! рдФрд░ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЙрд╕реА рддрд░рд╣ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдЬреИрд╕реЗ рдХрдХрдбрд╝реАрдЬреЗрдПрд╕ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдПрдХрд▓ cucumber.js рдлрд╝рд╛рдЗрд▓ рд▓реЛрдб рдХрд░рдирд╛ рдорд╛рдореВрд▓реА рд╣реИред рд╡рд░реАрдпрддрд╛, рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк, рдЖрджрд┐ рд╕рд╣рд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд▓реЛрдбрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рдФрд░ рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдФрд░ рд╣реИред

рдкреНрд░рд╢реНрди: рдХреНрдпрд╛ рдореИрдВ runCucumber рд▓рдЧрд╛рддрд╛рд░ рджреЛ рдмрд╛рд░ рдЪрд▓рд╛ рдкрд╛рдКрдВрдЧрд╛ _рдмрд┐рдирд╛ рдХреИрд╢реЗ рдХреЛ рд╕рд╛рдл рдХрд┐рдП _? рдпрд╣ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдкрд░реАрдХреНрд╖рдг рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рд╣рдо рд╕рдХреНрд░рд┐рдп рдореНрдпреВрдЯреЗрдВрдЯ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдмрджрд▓рддреЗ рд╕рдордп рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рддреНрд╡рд░рд┐рдд рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░ рдореЗрдВ рдХрдИ рдмрд╛рд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

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

рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛ рдЫрджреНрдо рдХреЛрдб:

const profiles = await loadProfiles();
const options = {
  ...profiles.default,
  formatter: require.resolve('./our-awesomely-crafted-formatter'),
  some: 'other options we want to override',
}
const cucumber = new Cucumber(options);

// Allow cucumber to load the step definitions once. 
// This is `async`, so support for esm can be added without a breaking change
await cucumber.initialize();

// Initial test run ("dry run"), without mutants active
await cucumber.run();

collectMutantCoveragePerTestFromFormatter();

// Start mutation testing:

global.activeMutant = 1;
await cucumber.run({ features: ['features/a.feature:24']);
collectResultsFromFormatterToDetermineKilledOrSurvivedMutant()

global.activeMutant = 2;
await cucumber.run({ features: ['features/b.feature:24:25:26', 'features/c.feature:12']);
collectResultsFromFormatterToDetermineKilledOrSurvivedMutant()

// etc

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

рдореИрдВрдиреЗ рдЕрдм рддрдХ рдЬреЛ рд╕реНрдХреЗрдЪ рдХрд┐рдпрд╛ рдерд╛ рд╡рд╣ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╢реИрд▓реА рдореЗрдВ рдерд╛, рд▓реЗрдХрд┐рди рд╡рд╣реА рдореМрд▓рд┐рдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ:

const runnerOptions = {
    support: {
        require: ['features/support/**/*.js']
    }
}

// initial run returns support code library
const { support } = await runCucumber(runnerOptions)

// subsequent run reuses support code library
await runCucumber({
    ...runnerOptions,
    support
})

рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рд╣рдорд╛рд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ЁЯСНЁЯП╗

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдЬ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд░реАрдХреНрд╖рдг рдЙрдкрдХрд░рдг рдПрдХреАрдХрд░рдг (рдЬреЗрд╕реНрдЯ, рд╕рд░реВ) рдХреЗ рд╕рд╛рде рдмрдбрд╝реА рдЧрдбрд╝рдмрдбрд╝реА рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдпреЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рдорд┐рд▓реАрдВ (рдорд╣рддреНрд╡ рдХреЗ рдХреНрд░рдо рдореЗрдВ):

  • cypress-cucumber-preprocessor рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдЯреИрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ (https://github.com/TheBrainFamily/cypress-cucumber-preprocessor/issues/196)
  • jest-cucumber рдХрдХрдбрд╝реА JSON рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ (https://github.com/bencompton/jest-cucumber/issues/27)
  • cypress-cucumber-preprocessor рдПрдХрддреНрд░реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рдорд░реНрдерди рдХреЗ рдХрдИ рдХрдХрдбрд╝реА JSON рд░рд┐рдкреЛрд░реНрдЯ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ (https://github.com/TheBrainFamily/cypress-cucumber-preprocessor/issues/423)
  • jest-cucumber jest-cucumber-fusion рдЬрд┐рддрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ
  • cucumber-jest рднреА рд╣реИ ...
  • рдХрд░реНрдо рдХрд╛ рдЕрдм рдХреЛрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИ (https://github.com/cucumber/cucumber-js/issues/1095)

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

рдмрдврд╝рд┐рдпрд╛ рд╕реБрдЭрд╛рд╡ @davidjgoss

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

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

рдареАрдХ рд╣реИ, рдпрд╣рд╛рдБ "рд░рди" рдмрд┐рдЯ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкрд░ рдкрд╣рд▓рд╛ рдкрд╛рд╕ рд╣реИред рдпрд╣ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдореМрдЬреВрдж IConfiguration рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЖрдзрд╛рд░рд┐рдд рд╣реИ (рдЗрд╕рд▓рд┐рдП рдиреАрдЪреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рдХрдо "рдлреНрд▓реИрдЯ":

export interface IRunCucumberOptions {
  cwd: string
  features: {
    defaultDialect?: string
    paths: string[]
  }
  filters: {
    name?: string[]
    tagExpression?: string
  }
  support:
    | {
        transpileWith?: string[]
        paths: string[]
      }
    | ISupportCodeLibrary
  runtime: {
    dryRun?: boolean
    failFast?: boolean
    filterStacktraces?: boolean
    parallel?: {
      count: number
    }
    retry?: {
      count: number
      tagExpression?: string
    }
    strict: boolean
    worldParameters?: any
  }
  formats: {
    stdout: string
    files: Record<string, string>
    options: IParsedArgvFormatOptions
  }
}

export interface IRunResult {
  success: boolean
  support: ISupportCodeLibrary
}

export async function runCucumber(
  options: IRunCucumberOptions
): Promise<IRunResult> {
  // do stuff
}

рдФрд░ рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рдХрд╕рд┐рдд рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреЛрдЧ:

const result = await runCucumber({
  cwd: process.cwd(),
  features: {
    paths: ['features/**/*.feature'],
  },
  filters: {
    name: ['Acme'],
    tagExpression: '<strong i="10">@interesting</strong>',
  },
  support: {
    transpileWith: ['ts-node'],
    paths: ['features/support/**/*.ts'],
  },
  runtime: {
    failFast: true,
    retry: {
      count: 1,
      tagExpression: '<strong i="11">@flaky</strong>',
    },
    strict: true,
    worldParameters: {
      foo: 'bar',
    },
  },
  formats: {
    stdout: '@cucumber/pretty-formatter',
    files: {
      'report.html': 'html',
      'TEST-cucumber.xml': 'junit',
    },
    options: {
      printAttachments: false,
    },
  },
})

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ! рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓/рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд▓реЛрдбрд┐рдВрдЧ рд╕рд╛рдордЧреНрд░реА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдПрдХ рдФрд░ рдХрд╛рд░реНрдп рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдкреНрд░рд╢реНрди: рдореИрдВ рдПрдХ рдХрд╕реНрдЯрдо рдлрд╝реЙрд░реНрдореЗрдЯрд░ рдХреЛ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реВрдВ?

@nicojs CLI рдкрд░ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ

formats: {
    files: {
      'report.html': './my/fancy-reporter.js',
      'other-report.html': '@me/reporter-package',
    }
  },

рдЗрд╕ @davidjgoss рдкрд░ рдкреНрд░рдЧрддрд┐ рджреЗрдЦрдХрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛!

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

рдЕрдВрддрддрдГ рдПрдХ JSON рд╕реНрдХреАрдорд╛, рд▓реЗрдХрд┐рди рдЬрдм рд╣рдо рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдХрд╛рд░ рд╣рдо рдордиреБрд╖реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд╣рдо рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкреНрд░рд╛рд░реВрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ cucumber/common рдореЛрдиреЛрд░реЗрдкреЛ рдореЗрдВ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдмрдирд╛рдПрдВ рдФрд░ рд╡рд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрд░ рдЯреАрдо рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░реЗрдВред

@aslakhellesoy рдХрд░реЗрдВрдЧреЗред

рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдмрдВрдзреЗ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдХреНрдпрд╛ рд╕реЛрдЪреЗрдВрдЧреЗ? рдЬреИрд╕реЗ рд╣рдо рдЙрд╕ рд╕реЗ runCucumber рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рдореИрдк рдХрд░реЗрдВрдЧреЗред рдпрд╣ рд╢рд╛рдпрдж рдереЛрдбрд╝реА рдЬрдЯрд┐рд▓рддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди support рдмреНрд▓реЙрдХ рд╣реЛрдиреЗ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рдХрд╛рд░рдг рдЕрдкреАрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдпрд╛ рддреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рдпрд╛ рдкрд╣рд▓реЗ рд▓реЛрдб рдХреА рдЧрдИ рд╕рдорд░реНрдерди рдХреЛрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рдХрд░ рд╕рдХрддрд╛ рд╣реИ + рдЕрдЪрд╛рд░ рднреАред рдФрд░ рдРрд╕реЗ рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╣рдо CLI рдкрд░ рд╕рдорд░реНрдерди рдХрд░реЗрдВрдЧреЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП --exit ) рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ API рдкрд░ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВред

рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдмрдВрдзреЗ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдХреНрдпрд╛ рд╕реЛрдЪреЗрдВрдЧреЗ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рд╣реИ, рдЬрдм рддрдХ рд╣рдо рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рдХрд▓реНрдк рдлрд╝рд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ runCucumber рдЪрд╛рд╣рддрд╛ рд╣реИред

рдЕрдВрддрддрдГ рдПрдХ JSON рд╕реНрдХреАрдорд╛, рд▓реЗрдХрд┐рди рдЬрдм рд╣рдо рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдХрд╛рд░ рд╣рдо рдордиреБрд╖реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рд╣рдореЗрдВ рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рд╣рдо JSON-schema-to-typescript рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП StrykerJS рдореЗрдВ JSON рд╕реНрдХреАрдорд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдо TS рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрд░реЛрдд рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдо рдЙрдиреНрд╣реЗрдВ prebuild рдЪрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреБрд░рдВрдд рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред

JSON рд╕реНрдХреАрдорд╛ рдЕрднреА рднреА рдорд╛рдирд╡ IMO рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣рдж рддрдХ рдкрдардиреАрдп рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрдЯреНрд░рд╛рдЗрдХрд░ рд░реЗрдкреЛ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреАрдЖрд░ рд╣реИрдВ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ ЁЯд╖тАНтЩАя╕П

рд╕реАрдПрд▓рдЖрдИ рдХреА рддрд░рд╣ рд╕реЙрд░реНрдЯ рдХрд░реЗрдВ

formats: {
    files: {
      'report.html': './my/fancy-reporter.js',
      'other-report.html': '@me/reporter-package',
    }
  },

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

formats: {
  files: {
    '': require.resolve('./my-awesome-stryker-formatter')
  }
}

рд╣рдореЗрдВ рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рддреНрдп рдХреЗ рдПрдХрд▓ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ JSON рд╕реНрдХреАрдорд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред -рдФрд░ рдлрд┐рд░ рдЙрд╕ рд╕реНрдХреАрдорд╛ рд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ/рдЬрд╛рд╡рд╛/рдЬреЛ рднреА рдХреЛрдб рдЬреЗрдирд░реЗрдЯ рдХрд░реЗрдВред

рд▓реЗрдХрд┐рди JSON рд╕реНрдХреАрдорд╛ рдордиреБрд╖реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрдврд╝рдирд╛ рдереЛрдбрд╝рд╛ рдХрдард┐рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рд╣рдо cucumber/common рдореЗрдВ GitHub рдореБрджреНрджреЗ рдореЗрдВ рд╕реНрдХреАрдорд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЪрд░реНрдЪрд╛ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рдерд╛ред

рджреЗрдЦреЛ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ?

JSON рд╕реНрдХреАрдорд╛ рдЕрднреА рднреА рдорд╛рдирд╡ IMO рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣рдж рддрдХ рдкрдардиреАрдп рд╣реИрдВ

рдореЗрд░реЗ рд▓рд┐рдП рдирд╣реАрдВ :-) рдмрд╣реБрдд рдХреНрд░рд┐рдпрд╛рддреНрдордХред

рдпрд╣ рдПрдХ рдРрд╕реЗ рд░рд┐рдкреЛрд░реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ?

formats: {
    stdout: './my-awesome-stryker-formatter',
    files: {
      'report.html': './my/fancy-reporter.js',
      'other-report.html': '@me/reporter-package',
    }
  },

(рдХреЗрд╡рд▓ рдПрдХ рдлреЙрд░реНрдореЗрдЯрд░ рд╕реНрдЯрдбрдЖрдЙрдЯ рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ)

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

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

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

bmsoko picture bmsoko  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

stefdelec picture stefdelec  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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