Cucumber-js: рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдХреЙрд▓рд┐рдВрдЧ рдЪрд░рдг

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

рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдХреЙрд▓рд┐рдВрдЧ рдЪрд░рдгреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред

https://github.com/cucumber/cucumber/wiki/Calling-Steps-from-Step-Definitions

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

:-1::-1::-1::-1::-1:

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

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд╕реНрдерд┐рддрд┐ рд╣реИ; рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ!

function x_is_something(x, cb) {
  console.log('x', x);
  cb();
}

Given(/x is (.*)/, x_is_something);

Given(/super x/, function(cb) {
  x_is_something(97, cb);
});

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

рдЬрдм рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рд╣рдо рдХрдХрдбрд╝реА-рдЖрд░рдмреА рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП #steps рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рджреЗрдЦреЗрдВ https://github.com/cucumber/cucumber/issues/68

рдзрдиреНрдпрд╡рд╛рдж рдореИрдЯред -рдЬреЗрдПрд╕ рдХреЗрд╡рд▓ рдЪрд░рдгреЛрдВ() рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ!

рдЗрд╕ рдкрд░ рдХреЛрдИ рдкреНрд░рдЧрддрд┐? рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореАрд▓ рдХреЗ рдкрддреНрдерд░ (0.3) рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдпреЛрдЬрд┐рдд рдирд╣реАрдВ рд╣реИред рдпрд╣ _ рдЪрд╛рд╣рд┐рдП_ 0.4 рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@mattwynne рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо step() рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдореИрдВ рд╕рд╣реА рд╣реВрдБ?

@jbpros рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдЖрдк #step рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЧреЗрд░рдХрд┐рди рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕рд┐рд░реНрдл рдПрдХ рдХрджрдо рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд┐рдирд╛ рдХрдХрдбрд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА, рдореИрдВ рдЗрд╕рдХрд╛ рдХрднреА рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рдФрд░ рдЗрд╕реЗ рдмреБрд░рд╛ рдЕрднреНрдпрд╛рд╕ рдорд╛рдирддрд╛ рд╣реВрдВред рдореИрдВ рд╣рдореЗрд╢рд╛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕реМрдВрдкрдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред

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

TL; DR: рдХреНрдпрд╛ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Cucumber.js (рдФрд░ -jvm, -ruby 2, рдЖрджрд┐) рдореЗрдВ steps() / step() рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдореИрдВ рдЖрдкрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВ рдореИрдЯред _рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ_, рдпрд╣ Cucumber.js рдкрд░ рдЗрд╕ рд╕рдордп рд╕рд░реНрд╡рд╛рдзрд┐рдХ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред

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

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

@msassak рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдкрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ рдереЗ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрдХрдбрд╝реА 2.0 рдореЗрдВ рдЙрди "рдореИрдкрд┐рдВрдЧ" рдХреЛ рдлрд┐рд░ рд╕реЗ рдореЙрдбрд▓рд┐рдВрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред

рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрднреА Cucumber.js рдореЗрдВ рдЗрд╕реА рдореБрджреНрджреЗ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рдЪреНрдЫреБрдХ рд╣реВрдВред рджреВрд╕рд░реА рдУрд░ рдореИрдВ рд╕рд┐рд░реНрдл рдЕрдкрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕реНрд╡рд╛рдж/рд░рд╛рдп рдХреЗ рдХрд╛рд░рдг рдлреАрдЪрд░ рдкреНрд░рддрд┐рдзрд╛рд░рдг рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

:-1::-1::-1::-1::-1:

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

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд╕реНрдерд┐рддрд┐ рд╣реИ; рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ!

function x_is_something(x, cb) {
  console.log('x', x);
  cb();
}

Given(/x is (.*)/, x_is_something);

Given(/super x/, function(cb) {
  x_is_something(97, cb);
});

CLOSED (WONTFIX) :рд╣рдереМрдбрд╝рд╛:

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдХреИрд╕реЗ step() рдпрд╣рд╛рдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЬреЗрдПрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рдд рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣рд╛ рд╣реИ (рдпрд╛рдиреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЬреАрдИрдЯреА рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрджрдо рдкрд░рд┐рднрд╛рд╖рд╛ рдЬрд┐рд╕реЗ рдЕрднреА рднреА рдЬреЗрдПрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)?

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ _рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ_, рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рдХрджрдо рд╣реИ рдпрд╛ рд╡рд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ (рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ)ред

рдЖрдк рдЕрднреА рднреА рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ When рдЪрд░рдг рдореЗрдВ рдЙрди рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Feature:
  Background:
    Given a valid user called Simon
    And a valid user called Sarah
    And a valid user called Johnny

  Scenario Outline:
    When each valid user sends a GET request to /search<query>
    Then everyone's request response code is 400
    And everyone's request response body starts with <body>

  Examples:
    | query  | body |
    | ?foo=1 | ...  |

рдФрд░ рд╣рд╛рдБ рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдЕрдиреБрд░реЛрдз рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдФрд░ рдЙрди рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдирд╛ред рдХреНрдпрд╛ рдпрд╣ рдмреБрд░рд╛ рд╣реИ?

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

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

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

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

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

рд╣рд╛рдп! рдореИрдВрдиреЗ рдПрдХ lib рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдареАрдХ рд╡рд╣реА рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВ (рджреВрд╕рд░реЗ рдЪрд░рдг рд╕реЗ рдПрдХ рдХрджрдо рдХреЙрд▓ рдХрд░реЗрдВ), рдпрд╣рд╛рдВ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ: https://github.com/hackhat/cucumberry
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

@hackhat рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рдЖрдорддреМрд░ рдкрд░ рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рд╕рд┐рдВрдХ рднрд╛рдЧ рдкрд╕рдВрдж рд╣реИред рдХреНрдпрд╛ рдХрдХрдбрд╝реА-рдкреНрд░реЛ рдХреЗрд╡рд▓ рдХрдХрдбрд╝реА.рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рд╣реИ?

@ jlin412 рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреИрд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдХрдбрд╝реА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рд╛рдпрдХ рдХреА рддрд░рд╣ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж

@hackhat рд╕рд┐рдВрдХ рдЪрд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: this.addStep(...)? рдХреНрдпрд╛ рдореБрдЭреЗ protractor.js/webdriver.js рдХреЗ рдмрдЬрд╛рдп рд╕реЗрд▓реЗрдирд┐рдпрдо-рд╕рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА?

@ jlin412 рдЖрдк рдХреЗрд╡рд▓ рд╕рд┐рдВрдХ рдкреНрд▓рдЧ-рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░реЗрдВред рдореИрдВ рдореЛрдмрд╛рдЗрд▓ рдкрд░ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЛ рд╕рдЯреАрдХ рдХрджрдо рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛ред рдпрджрд┐ рдЖрдк рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рд▓рдЧрднрдЧ 23h30 рдкреБрд░реНрддрдЧрд╛рд▓ рдШрдВрдЯреЗ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрд╛рдКрдВрдЧрд╛ред

@hackhat рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рдореЗрдВ рдмрджрд▓реЗрдВред рд╣реИрдХрд╣реИрдЯ/рдХрдХрдбрд╝реА-рд╕рдорд░реНрдердХ#1 . рджреЗрдЦреЗрдВ

@aslakhellesoy рдиреЗ рдирд╛рдо рдмрджрд▓рдХрд░ https://github.com/hackhat/cucumberry . рдХрд░ рджрд┐рдпрд╛

@aslakhellesoy рдлрд┐рд░ рд╕реНрдЯреЗрдк рдХреЙрд▓ рдХреЛ рдХреИрд╕реЗ рдЪреЗрди рдХрд░реЗрдВ? рдЕрдиреБрд╕рд░рдг рдХрд░рдирд╛ рдкрд╕рдВрдж рд╣реИ?

function x_is_something(x, cb) {
  console.log('x', x);
  this.x = x;
  cb();
}
function y_is_something(y, cb) {
  console.log('y', y);
  this.y = y;
  cb();
}

Given(/super z/, function(cb) {
  x_is_something(97, cb);
  y_is_something(8, cb);
});

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ x_is_something рдиреЗ y_is_something рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдирд╛ рдХрд╛рдо рдЦрддреНрдо рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рдорд┐рд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЙрд▓рдмреИрдХ рдХрд╣рд╛ рд╣реЛрдЧрд╛ред

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

Given(/super z/, function(cb) {
  x_is_something.bind(this)(97, cb);
  y_is_something.bind(this)(8, cb);
});

рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрди рдореБрджреНрджреЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдерд╛?

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

рдЧреБрд░реБ, рдордИ 14, 2015, 00:15 рдХреЛ рдпреВрдВ рдЬрд┐рдпрд╛ рд╕реВрдЪрдирд╛рдПрдВ @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@aslakhellesoy https://github.com/aslakhellesoy рдлрд┐рд░ рдХреИрд╕реЗ рд╢реНрд░реГрдВрдЦрд▓рд╛рдмрджреНрдз рдХрд░реЗрдВ
рдЪрд░рдг рдХреЙрд▓? рдЕрдиреБрд╕рд░рдг рдХрд░рдирд╛ рдкрд╕рдВрдж рд╣реИ?

рдлрд╝рдВрдХреНрд╢рди x_is_something(x, cb) {
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ ('рдПрдХреНрд╕', рдПрдХреНрд╕);
рдпрд╣ред рдПрдХреНрд╕ = рдПрдХреНрд╕;
рд╕реАрдмреА ();
}рдлрд╝рдВрдХреНрд╢рди y_is_something(y, cb) {
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ ('рд╡рд╛рдИ', рд╡рд╛рдИ);
рдпрд╣ред рд╡рд╛рдИ = рд╡рд╛рдИ;
рд╕реАрдмреА ();
}

рджрд┐рдпрд╛ рдЧрдпрд╛ (/ рд╕реБрдкрд░ рдЬреЗрдб /, рдлрд╝рдВрдХреНрд╢рди (рд╕реАрдмреА) {
x_is_something (97, рд╕реАрдмреА);
y_is_something (8, рд╕реАрдмреА);
});

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ x_is_something рдиреЗ the . рдХрд╣рд╛ рд╣реЛрдЧрд╛
y_is_something рдХреЛ рдЕрдкрдирд╛ рдХрд╛рдо рдЦрддреНрдо рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рдорд┐рд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЙрд▓рдмреИрдХред

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

рджрд┐рдпрд╛ рдЧрдпрд╛ (/ рд╕реБрдкрд░ рдЬреЗрдб /, рдлрд╝рдВрдХреНрд╢рди (рд╕реАрдмреА) {
x_is_something.bind (рдпрд╣) (97, рд╕реАрдмреА);
y_is_something.bind (рдпрд╣) (8, рд╕реАрдмреА);
});

рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрди рдореБрджреНрджреЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдерд╛?

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/cucumber/cucumber-js/issues/11#issuecomment -101845619
.

+1, рдпрд╣ lib рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@mattwynne рдиреЗ рдХреНрдпрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ (рдПрдХ рдЧреЗрд░рдХрд┐рди рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдХреЛрдб рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ):

    When a
    Then x
    When b
    Then y

---------------------------------

    Define x
        Then p
        And y
        And q

---------------------------------

    Step a
        ...
    Step b
        ...
    Step p
        ...
    Step q
        ...
    Step y
        ...

---------------------------------

@aslakhellesoy рдиреЗ рдХреНрдпрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ (рдЬреЗрдПрд╕ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛрдб рдирд┐рдХрд╛рд▓рдирд╛):

    When a
    Then x
    When b
    Then y

---------------------------------

    Step a
        ...
    Step b
        ...
    Step x
        ...
        Call f(p)
        ...
    Step y
        Call f(p)

---------------------------------

    Function f(p)
        ...

---------------------------------

рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдХреЙрд▓рд┐рдВрдЧ рдЪрд░рдг

    When a
    Then x
    When b
    Then y

---------------------------------

    Step a
        ...
    Step b
        ...
    Step x
        ...
        Call y(p)
        ...
    Step y
        ...

---------------------------------

рдореБрдЭреЗ рдЕрднреА рднреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЕрдореВрд░реНрдд рд╕реНрддрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реИ?

@yunjia рдпрд╣ рдореВрд▓ рдХреЙрд▓рдмреИрдХ рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реИ:

Given(/super z/, function(cb) {
  x_is_something(97, function () {
    y_is_something(8, cb);
  });
});

рдмрд╛рдзреНрдпрдХрд╛рд░реА рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдкрдиреЗ World рдкрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

function World(callback) {
    this.x_is_something = function (x, callback) {
      this.x = ...
    };

    this.y_is_something = function (y, callback) {
      this.y = ...
    };

    callback(); // tell Cucumber we're finished and to use 'this' as the world instance
  };
}
module.exports.World = World;

рдлрд┐рд░ рдЖрдкрдХреЗ рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ:

Given(/super z/, function(cb) {
  var self = this;
  self.x_is_something(97, function () {
    self.y_is_something(8, cb);
  });
});

рд╕рд╛рде рд╣реА, рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЪрд░рдг рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ Cucumber.js 0.5+ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ:

Given(/super z/, function() {
  this.x_is_something(97);
  this.y_is_something(8);
});

@ inf3rno рд╕реНрдЯреЗрдк рдбреЗрдлрд┐рдирд┐рд╢рди рд╕рд╛рджреЗ рдЕрдВрдЧреНрд░реЗрдЬреА рдФрд░ JS рдХреЛрдб рдХреЗ рдмреАрдЪ рдПрдХ рдкрддрд▓реА рдЕрдиреБрд╡рд╛рдж рдкрд░рдд рд╣реИред рд╕реНрдЯреЗрдкреНрд╕ рд╕реЗ рдХреЙрд▓рд┐рдВрдЧ рд╕реНрдЯреЗрдкреНрд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдХрд░, рд╣рдо рдЙрд╕ рд▓реЗрдпрд░ рдХреЛ рдореЛрдЯрд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рдХрджрдо рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмреАрдЪ рдпреБрдЧреНрдорд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдП рд░рдЦрдирд╛ рдмреЗрд╣рдж рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЧреЗрд░рдХрд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдРрд╕рд╛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИред

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

@jbpros

рдпрд╣ рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЧреЗрд░рдХрд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдРрд╕рд╛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИред

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

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

@aslakhellesoy @jbpros рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдХрджрдо рдПрдХ рдмреАрдЬреАрдп, рд░рдЪрдирд╛ рдпреЛрдЧреНрдп рдкреНрд░рдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдпрд╣ рдирд╣реАрдВ рд╣реИред

@jbpros , рдореИрдВ рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдЖрджрдд рд╣реИ рдФрд░ рд╡рд╛рджреЛрдВ рдХреА рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд╣реИ :)

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдХрднреА рдЕрдиреНрдп рдЪрд░рдгреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЪрд░рдгреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХрдбрд╝реА рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛? рдХреБрдЫ рдЗрд╕ рддрд░рд╣

Understand I log in to {site} as {user}, {pass}
    I visit {site}
    I log in as {user}, {pass}

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

рдЗрд╕ рдереНрд░реЗрдб рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЙрдХ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдХреГрдкрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдмрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВред

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

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

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

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

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

NoNameProvided picture NoNameProvided  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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