Cucumber-js: рдореВрд▓ JS рдореЙрдбреНрдпреВрд▓ рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдФрд░ рд╕рдорд░реНрдерди рдХреЛрдб рдореЗрдВ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 3 рдЕрдкреНрд░реИрд▓ 2020  ┬╖  13рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: cucumber/cucumber-js

рд╕рдВрдХрдЯ

рдЬрдм рдореИрдВ рдореВрд▓ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХ рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде Cucumber.js рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ require() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

Cucumber.js рд╕рдВрд╕реНрдХрд░рдг: 6.0.5
рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг: 13.8.0

рдкреНрд░рдЬрдирди рдХреЗ рдЪрд░рдг

  1. npm init рдФрд░ npm i cucumber рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдореВрд▓ NPM рдкреИрдХреЗрдЬ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗрдЯрдЕрдк рдХрд░реЗрдВ

    • "type": "module" рдХреЛ package.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ JS рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдореВрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛

  2. рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╕реБрд╡рд┐рдзрд╛ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ, features/mjs.feature :

    Feature: Native JS Modules
    
        Scenario: Load a native JS module step definition
            Given I have 42 cucumbers in my belly
    
  3. рдПрдХ рдореВрд▓ рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ, features/step_definitions.js :

    import { Given } from "cucumber";
    
    Given("I have {int} cucumbers in my belly", function (cucumberCount) {
        console.log("Step parsed.");
    });
    
  4. рдЦреАрд░рд╛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕:

    $ ./node_modules/.bin/cucumber-js
    

рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо

рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЪрд░рдг рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /some/path/cucumbertest/features/step_definitions.js
require() of ES modules is not supported.
require() of /some/path/cucumbertest/features/step_definitions.js from /some/path/cucumbertest/node_modules/cucumber/lib/cli/index.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
Instead rename step_definitions.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from /some/path/cucumbertest/package.json.

    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1167:13)
    at Module.load (internal/modules/cjs/loader.js:1000:32)
    at Function.Module._load (internal/modules/cjs/loader.js:899:14)
    at Module.require (internal/modules/cjs/loader.js:1040:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at /some/path/cucumbertest/node_modules/cucumber/lib/cli/index.js:119:42
    at Array.forEach (<anonymous>)
    at Cli.getSupportCodeLibrary (/some/path/cucumbertest/node_modules/cucumber/lib/cli/index.js:119:22)
    at Cli.run (/some/path/cucumbertest/node_modules/cucumber/lib/cli/index.js:141:37)
    at async Object.run [as default] (/some/path/cucumbertest/node_modules/cucumber/lib/cli/run.js:30:14)

рд╕рдорд╛рдкрди

рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдХрд╛рдо рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ Cucumber.js рдЯреАрдо рдиреЗ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рдореЗрд░реЗ рдФрд░ рдореЗрд░реА рдХрдВрдкрдиреА рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдореБрдЦ рд╕рдВрдкрддреНрддрд┐ рд░рд╣реА рд╣реИред рдореЗрд░реА рдЯреАрдо рдиреЗ рджреЗрд╢реА рдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреБрдЫ рд╕рд╛рдЭрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдШрдЯрдХреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧрд╛рдпрд╛ рд╣реИ, рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬрдм рддрдХ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдорд╛рди рд░рд╣рд╛ рдерд╛ (рд╕рдмрд╕реЗ рд╡рд░реНрддрдорд╛рди рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ import рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░) рдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рди рдХрдХрдбрд╝реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрдм рд╣рдо рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рдЧрдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╕рд╛рдЭрд╛ рдШрдЯрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рдЕрдиреНрдп рднрд╛рдЧреЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рдФрд░ рдПрдХреАрдХреГрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд┐рд▓рд┐рдЯреА рдЪреБрдиреМрддрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рдХреЙрдордирдЬреЗрдПрд╕ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдХреЗрд╡рд▓ рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдФрд░ рд╕рдорд░реНрдерди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЕрдирд┐рдЪреНрдЫреБрдХ рд╣реВрдВред

рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдХрд╛рдо рдкрд░ рд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рдЙрдирдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ ...

  • рдореВрд▓ рдореЙрдбреНрдпреВрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ .mjs рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреЗрдирд╛, рдкреНрд░рддрд┐ Node.js рд╕рдореНрдореЗрд▓рди (рдЗрд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдХрдХрдбрд╝реА рдХреЗ рдСрдЯреЛ-рд▓реЛрдбрд┐рдВрдЧ рддрд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдФрд░ --require рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Error [ERR_REQUIRE_ESM]: Must use import to load ES Module рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛
  • CJS рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдореВрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓рдкреЗрдЯрдирд╛ рдЬреЛ рдЧрддрд┐рд╢реАрд▓ import() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ; рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдпрд╛рдд рд╡рд╛рджрд╛ рд╕реАрдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрдХрдбрд╝реА рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрд╕ рд╡рд╛рджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЪрд░рдг рдХреЛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реБрдП рдХрд┐ рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛ рджреЗрд╢реА рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЕрднреА рддрдХ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рдерд╛)ред

рдЕрдЧрд░ рдпрд╣ рдореЗрд░реА рдХреНрд╖рдорддрд╛ рдХреЗ рднреАрддрд░ рд╣реИ, рддреЛ рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдореИрдВ Cucumber.js рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рдордХрд╛рдЬ рд╕реЗ рдЕрдкрд░рд┐рдЪрд┐рдд рд╣реВрдВ рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рдореБрдЭреЗ рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЗрд╕рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реВрдВрдЧрд╛ред

accepted enhancement

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

рдореИрдВ .js рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ "type":"module" рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдореЗрдВ рдЖрджрд░реНрд╢ рдмрди рдЬрд╛рдПрдЧрд╛ред

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

рдореИрдВ рдИрдПрд╕рдПрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдХрдХрдбрд╝реА-рдЬреЗрдПрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЕрдиреНрдп рдореБрджреНрджреЗ рдкрд╣рд▓реЗ рд╣реА рдЦреБрд▓ рдЪреБрдХреЗ рдереЗред

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

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

тЛК> ~/p/test ./node_modules/.bin/cucumber-js                                21:05:22
(node:7422) ExperimentalWarning: The ESM module loader is experimental.
file:///test/features/steps.js:1
import { Given } from "cucumber";
         ^^^^^
SyntaxError: The requested module 'cucumber' does not provide an export named 'Given'
    at ModuleJob._instantiate (internal/modules/esm/module_job.js:92:21)
    at async ModuleJob.run (internal/modules/esm/module_job.js:107:20)
    at async Loader.import (internal/modules/esm/loader.js:176:24)
    at async Promise.all (index 0)
    at async Cli.getSupportCodeLibrary (/test/node_modules/cucumber/lib/cli/index.js:119:5)
    at async Cli.run (/test/node_modules/cucumber/lib/cli/index.js:141:32)
    at async Object.run [as default] (/test/node_modules/cucumber/lib/cli/run.js:30:14)

рдореИрдВрдиреЗ рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕реЗ рдЙрджрд╛рд╣рд░рдг (рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд) рд▓рд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЖрдк рд╕рд╣реА рд╣реИрдВ, рдпрд╣ рд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдХреНрдпреЛрдВрдХрд┐ Cucumber.js рдПрдХ CommonJS рдореЙрдбреНрдпреВрд▓ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдпрд╛рдд рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрд▓реНрдкрд╛рд╡рдзрд┐ рдореЗрдВ, рдореИрдВ рд╢рд╛рдпрдж рдХреЗрд╡рд▓ рдореЙрдбреНрдпреВрд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЖрдпрд╛рдд рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рджрд┐рдП рдЧрдП/рдХрдм/рдлрд┐рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░реВрдВрдЧрд╛:

import cucumber from "cucumber";

cucumber.Given(...);

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

рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрдЬрд╛рдп рдХрдХрдбрд╝реА рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдПрд▓рдЖрдИ рд╡рд┐рдХрд▓реНрдк рдореБрдЭреЗ рдареАрдХ рд▓рдЧреЗрдЧрд╛ред рдпрд╣ рднреА рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХрдХрдбрд╝реА .cjs рдФрд░ .mjs рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд╛рд▓реА рд╕рдорд░реНрдерди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдЧреА, рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдорд╢рдГ CommonJS рдФрд░ рдореВрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреЗрдЧреАред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдмрд╕ рдпрд╣ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреА рднреА рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА; рдмрд╕ рдореБрдЭреЗ рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВред

рдореИрдВ рд╢рд╛рдпрдж рдХреЗрд╡рд▓ рдореЙрдбреНрдпреВрд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЖрдпрд╛рдд рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рджрд┐рдП рдЧрдП/рдХрдм/рдлрд┐рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░реВрдВрдЧрд╛:
"рдХрдХрдбрд╝реА" рд╕реЗ рдХрдХрдбрд╝реА рдЖрдпрд╛рдд рдХрд░реЗрдВ;
рдХрдХрдбрд╝реАред рджрд┐рдпрд╛ (...);

рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд╡рд╣реА рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИред
рдореЗрд░реЗ рдкрд╛рд╕ package.json рдореЗрдВ "рдЯрд╛рдЗрдк": "рдореЙрдбреНрдпреВрд▓" рд╣реИ рдФрд░ рдореЗрд░реА рдмрд╛рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдмрджрд▓рдирд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред

рдЕрдЧрд░ рдореИрдВ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:

import cucumber from '@cucumber/cucumber';
// OR
import { When } from '@cucumber/cucumber';

рдореБрдЭреЗ рдореВрд▓ рдкреЛрд╕реНрдЯ рдХреЗ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИред
рдЕрдЧрд░ рдореИрдВ . рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реВрдБ

const cucumber = require('@cucumber/cucumber');

рддрдм рдореБрдЭреЗ рдпрд╣ рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИ:

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп .cjs рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП /some/path/cucumbertest/features/step_definitions.js рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ, рдЖрдпрд╛рдд() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдмрджрд▓реЗрдВ, рдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ/рдкреИрдХреЗрдЬ.рдЬреЗрд╕рди рд╕реЗ "рдЯрд╛рдЗрдк": "рдореЙрдбреНрдпреВрд▓" рдХреЛ рд╣рдЯрд╛ рджреЗрдВред

рдЕрдЧрд░ рдореИрдВ step_definitions.js рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ _eother_ step_definitions.cjs рдпрд╛ step_definitions.mjs рдХрд░ рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдХрдХрдбрд╝реА рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрджреЗрд╢ рдорд┐рд▓рддреЗ рд╣реИрдВ рдЬреЛ рдореЗрд░реЗ рдЪрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрдмреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ:

UUUUUU

Failures:

1) Scenario: Empty Payload # spec\cucumber\features\users\create\main.feature:4
   ? When the client creates a POST request to /users
       Undefined. Implement with the following snippet:

         When('the client creates a POST request to \/users', function () {
           // Write code here that turns the phrase above into concrete actions
           return 'pending';
         });

... etc

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

рд╕рдорд╛рдзрд╛рди (рдкреНрд░рдХрд╛рд░)

рдЕрдВрдд рдореЗрдВ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВ "рдЯрд╛рдЗрдк": "рдореЙрдбреНрдпреВрд▓" рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХрдбрд╝реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ, рд╡рд╣ рд╣реИ "рдЯрд╛рдЗрдк": "рдореЙрдбреНрдпреВрд▓" рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЕрд▓рдЧ specpackage.json рдмрдирд╛рдирд╛ рдФрд░ рдХрдХрдбрд╝реА рдХреЛ spec/node_modules рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛

рдЕрднреА рддрдХ рдпрд╣ рдЪрд╛рд▓реВ рд▓рдЧрддрд╛ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рднреА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

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

рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди:
рдпрджрд┐ рдЖрдк рджреВрд╕рд░реА рдбрд┐рд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдЬреЗрдирд░реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ CJS рдФрд░ ES6 рдмрд┐рд▓реНрдб рджреЛрдиреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:

рдЬрд┐рд▓рд╛/рдЦреАрд░рд╛.js
рдЬрд┐рд▓рд╛/рдЦреАрд░рд╛.рдореЙрдбреНрдпреВрд▓.рдЬреЗрдПрд╕

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

"рдореЙрдбреНрдпреВрд▓": "dist/cucumber.module.js"

рдпрд╣ ES6 рдЖрдпрд╛рддреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЛрдб рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рднреА рд╡рд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ, рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдЖрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдо рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
https://nodejs.org/api/esm.html#esm_import_expressions

рд╣рд░ рдЬрдЧрд╣...

рдХреНрдпрд╛ рдХреЛрдИ рдРрд╕рд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдХрдХрдбрд╝реА рдХрд╛ рдЭрдВрдбрд╛ рд╣рдореЗрдВ ES рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

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

  • .js рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ "type":"module"
  • .mjs рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
  • рдХреБрдЫ рдФрд░?

рдзрдиреНрдпрд╡рд╛рдж!

рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЕрдкрдиреА рд╕рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП .mjs рдФрд░ .cjs рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдкрд░рдВрдкрд░рд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА рдРрд╕рд╛ рдХрд░рдирд╛ рдореЗрд░реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрдЧреАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрддрд░ рдкрд░ "рдЯрд╛рдЗрдк": "рдореЙрдбреНрдпреВрд▓" рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдмрдбрд╝реА рдЕрд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА рдФрд░ рдЕрдЧрд░ рдпрд╣ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ рддреЛ рдЗрдиреНрд╣реЗрдВ .js рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрдВред

рдореИрдВ .js рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ "type":"module" рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдореЗрдВ рдЖрджрд░реНрд╢ рдмрди рдЬрд╛рдПрдЧрд╛ред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж @adamlacoste @looeee

@davidjgoss рдХреНрдпрд╛ #1589 рдХрд╛ рд╡рд┐рд▓рдп рд╣реЛрдирд╛ рдЙрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ? рдпрд╛ рд╣рдореЗрдВ рдХреБрдЫ рдФрд░ рдЪрд╛рд╣рд┐рдП?

рдХреБрд╣рдиреА рд╕реЗ рд╣рд▓рдХрд╛ рдзрдХреНрдХрд╛ @ рдСрд░реЗрд▓рд┐рдпрди-рд░реАрд╡реНрд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

@cucumber/cucumber рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг 7.2.0 рдЕрдм npm рдкрд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ ESM рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╕рдорд░реНрдерди рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рдбреЙрдХреНрд╕ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ:
https://github.com/cucumber/cucumber-js/blob/master/docs/cli.md#es-modules-experimental-nodejs-12

рдпрджрд┐ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рдЗрд╕реЗ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдПрдХ рд╕реБрдкрд░ рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░рдЦрд╛ рд╣реИ:
https://github.com/davidjgoss/cucumber-esm-example

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд░рдЦрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реБрдИ, рдмрд╕ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рд╕рдВрджрд░реНрдн https://github.com/cucumber/cucumber-js/issues/1646

рддреЛ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдиреЗ рддреГрддреАрдп-рдкрдХреНрд╖ рдврд╛рдВрдЪреЗ рдФрд░ рд╕реНрд╡рд░реВрдкрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХреА рдЬреЛ require рдХреБрдЫ рд╕рд╛рдорд╛рди рд╕реАрдзреЗ (рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЗ рд╡рд┐рдкрд░реАрдд)ред рдореИрдВрдиреЗ 7.2.1 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдирд╡рд░реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 7.1.0 рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕ рдХрд╛рд░рдг рдХреЛ рдЦреЛрджреВрдВрдЧрд╛ рдФрд░ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдИрдПрд╕рдПрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реБрдП рдЗрд╕рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдмреАрдЪ, рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЕрднреА рднреА 7.2.0 рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИред

рдореИрдВ --esm рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде v7.2.0 рдПрдХ рд╢реЙрдЯ рджреЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдЙрд╕ рдкреИрдХреЗрдЬ рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЯреЗрд╕реНрдЯрдбрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдореИрдВ рдИрдПрд╕рдПрдо рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

td.replaceEsm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ --loader=testdouble ред рдЬрдм рдореИрдВ рд▓реЛрдбрд░ рдХреЛ рд╕реАрдзреЗ рдХрдХрдбрд╝реА рдХреНрд▓реА рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:

> cucumber-js test/integration --esm --loader=testdouble

error: unknown option '--loader=testdouble'

рдЪреВрдВрдХрд┐ рд╡рд╣ рд╡рд┐рдХрд▓реНрдк рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ NODE_OPTIONS :

> NODE_OPTIONS='--loader=testdouble' cucumber-js test/integration --esm

(node:62231) ExperimentalWarning: --experimental-loader is an experimental feature. This feature could change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
internal/process/esm_loader.js:74
    internalBinding('errors').triggerUncaughtException(
                              ^

TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension "" for /path/to/project/node_modules/@cucumber/cucumber/bin/cucumber-js
    at defaultGetFormat (internal/modules/esm/get_format.js:71:15)
    at getFormat (file:///path/to/project/node_modules/quibble/lib/quibble.mjs:65:12)
    at Loader.getFormat (internal/modules/esm/loader.js:104:42)
    at Loader.getModuleJob (internal/modules/esm/loader.js:242:31)
    at async Loader.import (internal/modules/esm/loader.js:176:17)
    at async Object.loadESM (internal/process/esm_loader.js:68:5) {
  code: 'ERR_UNKNOWN_FILE_EXTENSION'
}

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдпрд╣ рдиреЛрдб v14.17.0 рд╡рд┐рд░реБрджреНрдз рдерд╛

рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ NODE_OPTIONS рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ --loader рд╡рд┐рдХрд▓реНрдк рд╕реАрдзреЗ рдХреНрд▓реА рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдЗрди рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдкрд░ рдЕрдкрдиреЗ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдИрдПрд╕рдПрдо рд╕рдорд░реНрдерди рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ :)

рдХреНрдпрд╛ рд▓реЛрдбрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдХрд┐ рдЖрдк v7.2.0 рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗ?

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

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

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

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

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

jan-molak picture jan-molak  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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