Mocha: this.timeout() ES6 рдХреЗ рддреАрд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 21 рджрд┐рд╕ре░ 2015  ┬╖  59рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: mochajs/mocha

рддреАрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП "рд╕рдЦреНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдФрд░ ES6 рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдиреЛрдб> = 4 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдореЛрдЪрд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

describe('foo', () => {
  this.timeout(100);
});

# => TypeError: this.timeout is not a function

ES5 рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

describe('foo', function() {
  this.timeout(100);
});

рддреЛ, this рд╕рд╛рде рдореЛрдЪрд╛ рдХрд┐рд╕ рддрд░рд╣ рдХреА рдмрджрд╕реВрд░рдд рдЪрд╛рд▓ рд╣реИ?

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

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

рдЗрддрдиреЗ рд╕рд╛рд░реЗ "рдЬрд╛рджреВ" рдХреНрдпреЛрдВ, рдЕрдВрдд рдореЗрдВ, рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддреЗ рд╣реИрдВ? рдпрд╣ рдХреНрдпреЛрдВ рдирд╣реАрдВ ?:

var mocha = require('mocha');

mocha.describe('foo', (suite) => {
  suite.timeout(100);

  suite.it('must love bar', () => ... );  
});

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

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

рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░реАрдХреНрд╖рдг рд╕рдВрджрд░реНрдн рд╕реЗ рдмрд╛рдВрдзрддрд╛ рд╣реИ, рдЬреЛ рддреАрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред http://mochajs.org/ рд╕реЗ

screen shot 2015-12-21 at 8 06 34 am

рдЙрд╕рдХреЗ рд▓рд┐рдП рдорд╛рдлрд╝ рдХрд░рдирд╛!

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

рдЗрддрдиреЗ рд╕рд╛рд░реЗ "рдЬрд╛рджреВ" рдХреНрдпреЛрдВ, рдЕрдВрдд рдореЗрдВ, рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддреЗ рд╣реИрдВ? рдпрд╣ рдХреНрдпреЛрдВ рдирд╣реАрдВ ?:

var mocha = require('mocha');

mocha.describe('foo', (suite) => {
  suite.timeout(100);

  suite.it('must love bar', () => ... );  
});

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

рдЖрдк рдЬреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдПрдХ рдмрдбрд╝рд╛ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ рдФрд░ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ https://github.com/mochajs/mocha/issues/1969#issuecomment-160925915 рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ рдПрдХ рдкреБрдирд░реНрд▓реЗрдЦрди рдЙрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрд░реНрдерд╢рд╛рд╕реНрддреНрд░ рдХреЛ рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ :)

рдЬрд╛рдирдХрд░ рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ред рдзрдиреНрдпрд╡рд╛рджред

@ibc рдареАрдХ рд╣реИ, рдпрд╣

var mocha = require('mocha');

mocha.describe('foo', (suite) => {
  suite.timeout(100);

  suite.it('must love bar', (suite) => ... );  
});

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

var mocha = require('mocha');

mocha.describe('foo', (suite) => {
  suite.timeout(100);

  suite.it('must love bar', (test) => ... );  
});

рд╡реИрд╕реЗ рднреА, рддреАрд░ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕рдВрджрд░реНрднреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред

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

рд╢рд╛рдпрдж describe рдпрд╛ suite рд░реИрдкрд░ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ ES6 рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

describe({ feature: 'create stuff' , do () {
    it('abc', () => {
    }); 
}})

рдпрд╣ рдХрдо рд╕реЗ рдХрдо рд╕реБрдЗрдЯ рд╕реНрддрд░ рдкрд░ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдЗрд╕ рдкрд░ рдХрд┐рд╕реА рднреА рдЕрджреНрдпрддрди? рдореЗрд░реЗ рдкрд░ рдпрд╣ рд╣реИ

mocha = require('mocha');

mocha.describe('test', (suite) => {

suite.timeout(500);

suite.it('test', (done)=>
          )
    }
)

рдФрд░ TypeError рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛: рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рд╕рдВрдкрддреНрддрд┐ 'рдЯрд╛рдЗрдордЖрдЙрдЯ' рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддрд╛

@mroien рдпрд╣ рдореЛрдЪрд╛ рдмрдЧ рдирд╣реАрдВ рд╣реИред рддреАрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ function рд▓рд┐рдП 1:1 рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ рд╣реИред рдХреГрдкрдпрд╛ рдЗрд╕рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝реЗрдВ

рдХреНрдпрд╛ рдЗрд╕рд╕реЗ рдХреБрдЫ рдЖрдпрд╛? рдореБрдЭреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рд╣реИ, рдпрджрд┐ рдХреЗрд╡рд▓ рддреАрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдореЗрд░реЗ рдкреНрдпрд╛рд░ рдХреЗ рд▓рд┐рдП рдФрд░ 'рдЗрд╕' рд╕реЗ рдШреГрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдм рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ

рдЪреВрдВрдХрд┐ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗрд╡рд▓ done рд╕рд╛рде рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рдХреНрдпреЛрдВ рди рдХреЗрд╡рд▓ рдЯрд╛рдЗрдордЖрдЙрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВред

it('makes sense', done => {
    done.timeout(100);
});

@nomilous рдпрд╣ рдЕрднреА рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реБрдИ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд╡рд╣ setTimeout рдХреЛ it рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЬреИрд╕реЗ

it('description', done => {
     const func = () => {
          // assertions
     };
     setTimeout(func, 10000);
});

@nomilous рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдпрд╛ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@ andela-engmkwalusimbi рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬреИрд╕рд╛ рдХрд┐ @boneskull рдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ :

@mroien рдпрд╣ рдореЛрдЪрд╛ рдмрдЧ рдирд╣реАрдВ рд╣реИред рдПрд░реЛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП 1:1 рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ рд╣реИред рдХреГрдкрдпрд╛ рдЗрд╕рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝реЗрдВ

рд╣рд░ рдХреЛрдИ рдЕрднреА рднреА рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реИ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ, рдлрд┐рд░ рдпрд╣рд╛рдВ рд╡рд╛рдкрд╕ рдЖрдПрдВ рдФрд░ рдкрдврд╝реЗрдВ (рд╡рд╣рд╛рдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрд╕рд╛рдзрди рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рдореЗрд░реА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╣реАрдВ рдмреЗрд╣рддрд░ рд╕рдордЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рддреАрд░ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо bdd рдПрдкреАрдЖрдИ рдХреЛ context рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП this рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рддреНрдпреЗрдХ рд░рдирдиреЗрдмрд▓ (рд╣реБрдХ, рдкрд░реАрдХреНрд╖рдг) рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВред рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рднреВрдХрдВрдк рд╣реИ, рдРрд╕рд╛ рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛:

it('should do something', function (done) {
  this.timeout(9000);
  // stuff
  done();
});

рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

it('should do something', (context, done) => {
  context.timeout(9000);
  done();
});

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

it('should do something', function (context, done) {
  // context is unused, but 'done' is now the second parameter
  this.timeout(9000);
  done();
});

рд╣рдо рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ bdd рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐--рдпрд╣ рд╕рд┐рд░реНрдл рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдореЗрд░реЗ рдкрд╛рд╕ "рдпрд╣ рдореБрджреНрджрд╛ рдХрд╣рд╛рдВ рд╣реИ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЧрд╣рди рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред :рдореБрд╕реНрдХреБрд░рд╛рдУ:

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

it('should do something', function ({ context, done }) { ...

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

@boneskull рдПрдХ рдирдпрд╛ bdd-es6 рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ :)

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╕реЗ рдкреНрдпрд╛рд░ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИрдВ рдЬреИрд╕реЗ .filter(i => i.val) рдЬреИрд╕реЗ рдРрд░реЗ рдлрд╝рдВрдХреНрд╢рдВрд╕, рд╕рд╛рдорд╛рдиреНрдп рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдХрд╛рдлреА рдЙрдкрдпреЛрдЧреА рд╣реИ рдФрд░ рдпрд╣ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╣рд░ рдмрд╛рд░ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ this рдЬрд╛рджреВ рдХрдм рд╕реЗ рд╣реИ, рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдЖрдк (рддреАрд░) рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВ? рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рд░ рдмрд╛рд░ рдПрдХ рдЪрд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдЬрдм рдореИрдВ рд╡рд╛рджреЗ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЕрдиреНрдпрдерд╛ рдореИрдВ рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдПрд╡рд╛ рдЬреИрд╕реЗ рдХреБрдЫ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд▓реЗрддрд╛ред рдореЛрдЪрд╛ рдХреА рд╕рд╛рджрдЧреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ #1969 рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рд╛рдорд╛рдиреНрдп/рддреАрд░ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдХреЛрдИ рдмрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдпрд╣ рди рдмрддрд╛рдПрдВ рдХрд┐ рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреЗрдЬрд╝ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рд╕рдВрдкрд╛рджрдХ рдПрдХрд▓ f рдХреЛ function () {\n\t\n} ред

рдореИрдВ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реВрдВ, рдХреНрдпрд╛ before() рдХреЙрд▓ рдХреЛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рддреАрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ?

    before( async function () {
      data = await provider.getData();
      console.log(data);
      this.timeout(30*1000);
    });

рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИред рдЕрднреА рднреА рдпрд╣рд╛рдБ 4 рд╕реЗрдХрдВрдб рдХрд╛ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рд░рд╣рд╛ рд╣реИред рдореЗрд░реЗ рдЯреЗрд╕реНрдЯ рд╕реВрдЯ рдореЗрдВ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдзреАрдореА рдЪреАрдЬ рд╣реИред рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП mocha.opts рдореЗрдВ 30s рддрдХ рдЯрд╛рдЗрдордЖрдЙрдЯ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 30 рдХреЗ рдмрд╛рдж рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдЬрдм 4s рдЙрдирдореЗрдВ рд╕реЗ 99% рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИред

рдЗрд╕ рдмреАрдЪ рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрд╣рд▓реЗ describe() рд╡рд╕рд╛ рддреАрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрдЬрд╛рдп function рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

describe('Search API', function () {
    this.timeout(30*1000);

    context('search', () => {
        let data;

        before( async () => {
          data = await provider.getSearch();
        });

        it('returns results', () => {
          expect(data).to.exist;
          expect(data.results).to.be.instanceOf(Array);
          expect(data.results.length).to.be.above(0);
        });
    })
});

@chovy await provider.getData() рдореЗрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЖрдк рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

before(async function () {
  this.timeout(30*1000); // set timeout first, then run the function
  data = await provider.getData();
  console.log(data);
});

рдореИрдВ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реВрдВ, рдХреНрдпрд╛ рдкрд╣рд▓реЗ() рдХреЙрд▓ рдХреЛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рддреАрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ?

рдмрд╕ рдЗрд╕ рдкрд░ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП: рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореЛрдЪрд╛ рдХреЗ timeout рдХреЛ рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдХреЛрдИ рднреА рдЪрд░реНрдЪрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрдзрд╛рд╡реА) рд╕рдВрднрд╛рд╡рд┐рдд рдирдП (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рд╕рдВрд╢реЛрдзрд┐рдд) рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рд╣реИред

рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛:

it('...', (done) => {
  ...
  done()
})

рддрдерд╛

it('...', (t) => {
  t.timeout(500)
  t.tag('integration', 'api')
  ...
  t.done()
})

рдПрдХ рд╣реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред

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

рддреЛ рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдЖрдкрдХреЛ рдкрд╛рд░рдВрдкрд░рд┐рдХ done рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕ done рдлрд╝рдВрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рдеред

this.timeout() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмреАрддрд╛ рд╣реБрдЖ рд╕рдордп рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

@dasilvacontin рдкрддрд╛ рдирд╣реАрдВ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ред рдпрд╣ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╡рд┐рдЪрд╛рд░ рд╣реИред

@dasilvacontin рдУрд╣, рдореБрдЭреЗ рдпрд╛рдж рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдк рд╢рд╛рдпрдж рдирд╣реАрдВ рдЪрд╛рд╣рддреЗред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдХреНрдпрд╛ рдЖрдк "рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИ", @boneskull рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЖрдк рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдореЛрдЪрд╛ рд╕реЛрдЪреЗрдВрдЧреЗ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдПрд╕рд┐рдВрдХ рд╣реИ?

реиреп рдЬрдирд╡рд░реА реирежрезрен рдХреЛ режрел:релрек рдмрдЬреЗ, рдХреНрд░рд┐рд╕реНрдЯреЛрдлрд░ рд╣рд┐рд▓рд░ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@dasilvacontin рдУрд╣, рдореБрдЭреЗ рдпрд╛рдж рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдк рд╢рд╛рдпрдж рдирд╣реАрдВ рдЪрд╛рд╣рддреЗред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВред

рд╕рд╛рде рд╣реА, рдЖрдк 't' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдПрд╕рд┐рдВрдХреНрд╕ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рдЕрдкрдиреЗ рдЗрд░рд╛рджреЗ рдХреА рдШреЛрд╖рдгрд╛ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ?

рдЯреЗрдк рдореЗрдВ рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ 't.done' (рдЙрдирдХреЗ API рдореЗрдВ 't.end') рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ, рдпрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рджрд╛рд╡реЗ ('t.plan') рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИред

рдХреНрдпрд╛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕рдореЗрдВ () рддреАрд╕рд░рд╛ рддрд░реНрдХ рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛? рд╡рд╣ рдПрдкреАрдЖрдИ рдирд╣реАрдВ рддреЛрдбрд╝реЗрдЧрд╛ред

it ('accepts lambda', (done)=>{ doWork();  done(); }, {timeout:60000});

@рдмреЛрдирд╕реНрдХреБрд▓

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╕рдВрджрд░реНрдн рдХреЛ рдкрд╣рд▓реЗ рд░рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рджреВрд╕рд░рд╛ рдерд╛?

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛:

it('should do something', function (done) {
  this.timeout(9000);
  // stuff
  done();
});

рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

it('should do something', (done, context) => {
  context.timeout(9000);
  done();
});
it('should do something', function (done, context) {
  // context is unused, but 'done' is now the second parameter
  this.timeout(9000);
  done();
});

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

рдореЗрд░реЗ рдкрд╛рд╕ "рдпрд╣ рдореБрджреНрджрд╛ рдХрд╣рд╛рдВ рд╣реИ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЧрд╣рди рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдореИрдВ

рдпрд╛ рдЕрдЧрд░ рд╕рдВрджрд░реНрдн рдХреЛ рдХреБрдЫ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд░рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

it('should do something', function (done, override) {
  // context is unused, but 'done' is now the second parameter
  override.timeout(9000);
  done();
});

рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдЧреИрд░-рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рднреА рд▓реВрдВрдЧрд╛ :)

done рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╕рдорд╛рдзрд╛рди рдХрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ done рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рднрд▓реЗ рд╣реА рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛред рдЦреБрдж рдХреЗ рд▓рд┐рдП рдмрд╛рдд рд╣реЛ рд░рд╣реА рд╣реИ, рдореИрдВ рдореИрдВ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдмрд╛рд╣рд░ рдЯрд╛рдЗрдк рдХрд░реЗрдВрдЧреЗ рдкрддрд╛ function рдФрд░ return рд╕реЗ .then(()=>{done()}, done) !

@ рдлреНрд▓реИрдореЗрдиреНрдХреЛ рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ (рд╣рд╛рдВ, рдпрд╣ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ "рдЬрд╛рджреБрдИ" рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдФрд░ рдпрд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рд╣рдЬ рд╣реИ рдФрд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореЛрдЪрд╛ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЕрдореВрд░реНрддрддрд╛ рдореЗрдВ рдЦрд┐рд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ "рдЬрд╛рджреВ" рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИ); рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреИрдЧ рдФрд░/рдпрд╛ рд▓рдВрдмрд┐рдд-рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░рдгреЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рджреЛрдиреЛрдВ рдЕрдиреБрд░реЛрдзрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ (рдЙрдиреНрд╣реЗрдВ рдЧрд┐рдЯрд╣рдм рдореБрджреНрджреЛрдВ/рдкреАрдЖрд░ рд╕реВрдЪреА рдЦреЛрдЬ рдмреЙрдХреНрд╕ рдореЗрдВ рдвреВрдВрдврдирд╛ рдкрд╛рдардХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВ ' рд╕рд╣рд╛рдиреБрднреВрддрд┐ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗ (рднрд▓реЗ рд╣реА рдЙрдирдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ, рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЪреАрдЬрд╝ рдХреЗ рдлрд╛рдпрджреЗ рд╣реИрдВ)ред

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

рдореБрдЭреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдпрд╛ рдИрдПрд╕ 6 рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдореЛрдЪрд╛ рдкрд░ рдХреБрдЫ рд╕реНрд╡рд┐рдЪ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдкрд╕рдВрдж рдЖрдПрдЧрд╛ред

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

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

рдкрд░реАрдХреНрд╖рдг рдШреЛрд╖рдгрд╛ рдореЗрдВ рдиреАрдЪреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд when рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬреЛрдбрд╝рдХрд░: it('does something', when(() => someFunctionReturningAPromise, customTimeout)) рдореЛрдЪрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдЫреЛрдбрд╝реЗ рдмрд┐рдирд╛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕реА рддрд░рд╣, рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд┐рдП рдЧрдП рдХреЙрд▓рдмреИрдХ рдХреЗ рдмрдЬрд╛рдп рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: it('can access the mocha test context', when(testContext => someFunctionThatNeedsContext(testContext))

const when = (lambda, timeout) =>
  function() { // return a plain function for mocha to bind this to
    this.timeout(timeout || this.timeout() || 1000)
    return lambda(this)
  }

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ:

const delay = timeout =>
  new Promise((resolve, reject) => setTimeout(resolve, timeout))

const deject = timeout => // similar to above, but a delayed reject
  new Promise((resolve, reject) => setTimeout(reject, timeout))

describe('mocha testing', () => {
  context('with only arrow functions', () => {
    context('tests that do not time out', () => {
      it('passes fast', when(() => delay(10), 100))
      it('does not usually time out', when(() => delay(2000), 2010))
    })
    context('tests that will time out', () => { // these should fail if the 'when' function works properly
      it('times out fast', when(() => delay(1000), 10)) // will fail in 10ms
      it('times out', when(() => delay(1000), 1000)) // will fail in about 1000ms
    })
    context('tests that will reject', () => { // this shows the when function works as expected when a test rejects
      it('fails fast', when(() => deject(10), 100))
    })
  })
})

@ astitt-Ripple рд╣рд╛рдБ, рдпрд╛ рдЖрдк рдмрд╕ function () {} рд▓рд┐рдЦрддреЗ рд╣реИрдВ ... Wtf?

рдареАрдХ рд╣реИ рд▓реБрдХрд╛, рдмреАрдорд╛рд░ рдХрд╛рдЯрдиреЗред :-)

рдПрд░реЛ рдлрдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд░рд┐рдЯрд░реНрди рдХреЛ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдореЗрдВ
es6 рдкреНрд░рдХрд╛рд░ рд╕реЗрдЯрдЕрдк, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╛рджреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ 'рдлрд┐рд░'
рдЬрдВрдЬреАрд░ред

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

рдпрджрд┐ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╛рдпрджреЗ рд╕реЗ рддреАрд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рддреЛ
рдФрд░/рдпрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓реА, рдлрд╝рдВрдХреНрд╢рди рд░рд┐рдЯрд░реНрди рдЬреЛрдбрд╝рдирд╛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ
рдЕрд╕рдВрдЧрддред рд╕реБрдЭрд╛рдП рдЧрдП 'рдХрдм' рдлреЙрд░реНрдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ рдЬреЛ
рдкрд╛рд░рдВрдкрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреАрд░ рдФрд░ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╢реИрд▓реА рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ
рдХреЙрд▓рдмреИрдХ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рд░рд┐рдЯрд░реНрди рд╢реИрд▓рд┐рдпрд╛рдБред рдпрд╣ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ
рд╕рдВрджрд░реНрдн рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ рдпрд╣ dsl рд╣рдо рд╕рднреА рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рд╣рдо рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
рд╡рд╛рджреЗ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВ async рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИрдВрдбрд▓ рддреЛ
рдХреБрдВрдЖред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди + рд░рд┐рдЯрд░реНрди рд╕реЗ рдЫреЛрдЯрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╣рдорд╛рд░реЗ рджреЛрд╕реНрдд рдШреБрдВрдШрд░рд╛рд▓реЗ рдХреЗ рдмрд┐рдирд╛ рднреА:
рдХрдм (() => ...)

рд╢рд╛рдпрдж рдпрд╣ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдкрд╕рдВрджреАрджрд╛ рд╢реИрд▓реА рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдФрд░
рдореИрдВ рдЗрд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╢рд╛рдпрдж рдпрд╣ рд╕рдо
рдирд┐рдВрджрдиреАрдп рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдХреЗ wtf рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИред рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВред рдореЛрдЪрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ
рдкреНрд░реА-рдПрдлрдкреА рдлреНрд░реЗрдВрдбрд▓реА рдЬреЗ.рдПрд╕. рдкрд╢реНрдЪ рд╕рдВрдЧрддрддрд╛ рдПрдХ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреА рдЪрд┐рдВрддрд╛ рд╣реИред рдЙрд╕
рднреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

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

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

рдпрджрд┐ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ ... рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓реА ...

...рдлрд┐рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП this.mutatingMethod(currentConfiguration) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди (рдпрд╛ рдмрд▓реНрдХрд┐ рд╕рдмрд░реВрдЯреАрди) рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, return (рдЬреЛ рд╕рд┐рд░реНрдл рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ) рд▓рд┐рдЦрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЕрд╕рдВрдЧрдд рд╣реИред , рдФрд░ рдЕрд╕рдВрдЧрдд рдЙрдкрд╕реНрдерд┐рддрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд╕рдВрдЧрддрд┐ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреЗрдЧреАред

(рдореБрдЭреЗ рдЧрд▓рдд рдордд рд╕рдордЭреЛ, рдореИрдВ рдЬреЗрдПрд╕ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╕реЗ рдХрд╛рдлреА рдЦреБрд╢ рд╣реВрдВ, рд▓реЗрдХрд┐рди function / return рдмрдирд╛рдо => рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдЙрд╕ рдкреНрд░рддрд┐рдорд╛рди рдореЗрдВ рдХреНрд▓реАрдирд░ рджрд┐рдЦрдиреЗ рдХреА рдмрд╛рдд рд╣реИ, рдЬрдмрдХрд┐ рд╢реБрджреНрдзрддрд╛ рдФрд░ рдШреЛрд╖рдгрд╛рддреНрдордХ рдмрдирд╛рдо рдЕрдирд┐рд╡рд╛рд░реНрдп рдЬреИрд╕реА рдЕрдиреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред рдПрдХ рдкрд░реАрдХреНрд╖рдг рдзрд╛рд╡рдХ рд╣реЛрдирд╛ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдерд╛ рдЗрд╕рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ / рдЕрд░реНрдерд╢рд╛рд╕реНрддреНрд░ , рдЬрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рддреАрд░ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╢рд╛рдпрдж рдЫреЛрдЯрд╛ рд╣реЛрдЧрд╛ ...)

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

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

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

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

рдЕрд╕рд▓ рдореЗрдВ рд╣рдо рд╕реА рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рд╣рдирд╢реАрд▓рддрд╛ рджреА рдЧрдИ рд╣реИ, рдЬреИрд╕реЗ рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ рдЖрдк => рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдмрдЬрд╛рдп рдлрд╝рдВрдХреНрд╢рди/рд░рд┐рдЯрд░реНрди рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╕ рдЕрдкрдирд╛ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред рд╕реА рдореЗрдВ рдПрдлрдкреА рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд▓реЗрддрд╛ рд╣реИ, рдЬреЛ рдЖрдЦрд┐рд░рдХрд╛рд░, рдХреЗрд╡рд▓ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ .../рдПрд╕

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

рд╡реИрд╕реЗ рднреАред рдореИрдВ рдЕрдкрдиреЗ рд╕реБрдЭрд╛рдП рдЧрдП рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдФрд░ рдЕрдиреНрдп рд▓реЛрдЧ рднреА рдЕрдм рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВред рдореИрдВ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг-рдзрд╛рд╡рдХ рд╕рдорд╛рдзрд╛рди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмреАрдЪ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрддреНрдкрд╛рджрдХ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд░рд╣реЗрдВ рдХрд┐ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреНрдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╡рд╣рд╛рдБ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдореБрдЭреЗ рддреАрд░ рдкрд╕рдВрдж рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдХрд╛рд░реНрдп рдкрд╕рдВрдж рд╣реИрдВред рдореИрдВрдиреЗ рдРрд╕рд╛ рдХреЛрдИ рдареЛрд╕ рддрд░реНрдХ рдирд╣реАрдВ рджреЗрдЦрд╛ рдЬреЛ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдмрджрд▓ рджреЗред рдореИрдВ рдПрдХ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдШреБрдЯрдиреЗ рдХреЗ рдЭрдЯрдХреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╕реЛрдЪрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ: "рдмрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, wtf" рдпрд╛ "рдЖрдк рдЕрднреА рднреА рдЕрдзрд┐рдХ рд╡рд░реНрдмреЛрдЬрд╝ _syntax_ рдХреЗ рд╕рд╛рде fp рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ"ред

рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдХрд┐рд╕реА рдХреЛ рднреА when рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдирд┐рдл рдиреЗ рдХрд╣рд╛ред :-)

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

рдореБрдЭреЗ рддреАрд░ рдкрд╕рдВрдж рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдХрд╛рд░реНрдп рдкрд╕рдВрдж рд╣реИрдВред

... рдпрд╣ рдШреБрдЯрдиреЗ рдХреЗ рдЭрдЯрдХреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕реЛрдЪрд╛ рдЬрд╛рдирд╛ рдмреЗрд╣рддрд░ рдерд╛ рдЬреИрд╕реЗ: ... "рдЖрдк рдЕрднреА рднреА рдЕрдзрд┐рдХ рд╡рд░реНрдмреЛрдЬрд╝ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде fp рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ"ред

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

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

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

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

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ; рдореЗрд░реЗ рд╕рд┐рд░ рдХреЗ рдКрдкрд░ рд╕реЗ it рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдЬреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдПрдХ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдорд╛рдирдЪрд┐рддреНрд░ (рдЬреЗрдПрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ) рд╣реЛрдЧрд╛, рдореЛрдЪрд╛ рдореЗрдВ рдПрдХ рд╕рднреНрдп рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рдЕрдЧрд░ рдХреЛрдИ рдЪрд╛рд╣рддрд╛ рд╣реИ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

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

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ;

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

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

рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП +1ред

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

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

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

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЖрдиреЗ рд╡рд╛рд▓реА рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдХреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореЛрдЪрд╛ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрдлрдкреА рдореЗрдВ рд▓реЗрдЦрди рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдорддрд▓рдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВрдиреЗ рдЬреЛ рдХрд╣рд╛, рд╡рд╣ рдЗрд╕рдХреЗ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд┐рдкрд░реАрдд рд╣реИ

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

(рдЙрджреНрдзреГрдд рдФрд░ рдХреНрд░рдо рдореЗрдВ рдЙрддреНрддрд░ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрдХреАрдирди рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рд╛рдорд╛рди рдмрд╛рдж рдореЗрдВ рдкрд╣рд▓реЗ рдХреА рдмрдЬрд╛рдп рд╣реИред)


рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЬреЛ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рд╡рд╣ рдЕрднреА рднреА рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕реЗ рдХрд┐рдП рдЧрдП рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВ (рддрд╛рдХрд┐ рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрди рдЬрд╛рдП)ред рдлрд┐рд░... рдХреМрди рд╕реЗ рдЕрдиреНрдп рд╡рд┐рдЪрд╛рд░ рдЗрд╕реЗ рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕рдорд╛рдзрд╛рди рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ?

рдпрджрд┐ рд╣рдо рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрддрддрд╛ рддреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕реЗ рд╕рд░рд▓ рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИрдВ рдЬрд┐рди рдкрд░ рд╣рдо рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рд╣рдо рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЗрди рджреЛрдиреЛрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рди рдХрд┐ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░:

it("runs immediately", () => {
  // call functions and assert whatever
})
it("runs asynchronously", doneWithSomeOtherName => {
  setTimeout(() => {
    // call functions and assert whatever
    doneWithSomeOtherName()
  }, 100)
})

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

it("looks just like an asynchronous test with a different name for `done`, but never tells Mocha it's done", context => {
  context.configureByMutation("some value")
  // call functions and assert whatever
})

рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА, рд╡рд╣рд╛рдВ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдЗрд╕ рдкрд░ рдФрд░ рдиреАрдЪреЗред


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

:+1:!


рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЖрдиреЗ рд╡рд╛рд▓реА рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдХреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореЛрдЪрд╛ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрдлрдкреА рдореЗрдВ рд▓реЗрдЦрди рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдорддрд▓рдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред

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

it("imperatively sets the timeout multiple times", function(done) {
  this.timeout(5000)
  var context = this
  setTimeout(function() {
    context.timeout(1000)
    setTimeout(done, 500)
  }, 4000)
})

...рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдЧреИрд░-рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде: рдЕрдирд┐рд╡рд╛рд░реНрдп рд╕рд╛рдордЧреНрд░реА рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рди рдХрд░реЗрдВред

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

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

рдореБрдЭреЗ рд╢рд╛рдпрдж рдЗрд╕ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдкрд░ рдЗрддрдиреА рджреВрд░ рднреА рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛; рд╕рдорд╛рдзрд╛рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдиреАрдЪреЗ рджреЗрдЦреЗрдВред рдореИрдВ


рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдРрдб-рдСрди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдкреНрд░рдореБрдЦ рдореБрджреНрджрд╛ рдХреНрдпрд╛ рд╣реИред

(рдпрд╣рд╛рдВ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ :) рд╡реИрд╕реЗ рдореБрдЭреЗ рд╡рд╣ рдмрд┐рдЯ рдкрд╕рдВрдж рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдПрдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЗ рдмрдЬрд╛рдп рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ timeout рд▓реЗрддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ! рдпрджрд┐ рдЖрдк рдореЛрдЪрд╛ рдХреА рдмрд╛рдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реИрдВ - рдФрд░ рдХреБрдЫ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ рдпрджрд┐ рдореБрдЭреЗ рд╕рд╣реА рдпрд╛рдж рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ рдЙрд╕реА рддрд░реАрдХреЗ рдХреЛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ properties done рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ done рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдкрдЪрд╛рддрд╛ рд╣реВрдВ), рддреЛ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдХрдо рд╕реЗ рдХрдо рд╣рдо рдЗрд╕реЗ рдПрдХ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рддреАрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ (рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ, рд╢рд╛рдпрдж it.configured рдпрд╛ it(...).configured(...) рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ it рдореЗрдВ рдЕрдкрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред it(...).configured(...) рдЕрдЧрд░ рд╣рдо рдЕрдзрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ...) - рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкрд┐рдЫрдбрд╝рд╛-рд╕рдВрдЧрдд рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ рдЬреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди/рдЕрдирд┐рд╡рд╛рд░реНрдп рдорд╛рдорд▓реЗ рд╕реЗ рдирд┐рдкрдЯрддрд╛ рд╣реИ рдФрд░ рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ "рджрд╛рдПрдВ рд░рд╛рд╕реНрддрд╛" (рдЬреЛ рдореИрдВ рдмрд╣рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рд╡реИрд╕реЗ рднреА рд╣реИ): рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдореЗрдВ this рдмрд╛рдж рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдореБрдЭреЗ рдЬреЛ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛, рд╡рд╣ рд╣реИ: рдЖрдЗрдП рдЗрд╕рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рднрд╛рдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ!

рдореИрдВ рдХрд╕рдо рдЦрд╛рддрд╛ рд╣реВрдБ рдореИрдВрдиреЗ рдХрд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ рдЖрдк рдРрд╕рд╛ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

describe('a slow thing', () => {
 // test code...
}).timeout(5000);

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

@ рдереЙрдо-рдирд┐рдХ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореЛрдЪрд╛ рдХреЗ рд╕рднреА рдХрд╛рд░реНрдп рдЗрд╕рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ рд╣реИрдВ

return this;

рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдлреЙрд░реНрдо рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдмрджрд▓рддреЗ рд╕рдордп рдпрд╣ рдореЗрд░реЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рд╕рдорд╛рд░реЛрд╣() { ..... }

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

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

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

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

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

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

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

рддреЛ рд╢рд╛рдпрдж рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рдФрд░ рд╕рдм рдХреБрдЫ _seems_ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ:

it('does something', function() {
  testProcedureFunction('something','1')
})

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

рдкрд░реАрдХреНрд╖рдг рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕реА рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

it('does something', function() {
  return testProcedureFunction('something','1')
})

рдЕрдм рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХ рд▓рд╛рдЗрди рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдХреЗрд╕ рдПрдХ рд▓рд╛рдЗрди рд╣реЛрдЧрд╛, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЬрдм рдЗрдирдкреБрдЯ рдРрд╕реЗ рд╣реЛрдВ рдХрд┐ рдПрдХ рдмрдбрд╝реЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред рдЕрдм рд╢рд╛рд╕реНрддреНрд░реАрдп рдЬреЗрдПрд╕ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рддреАрд░реЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЗ рдмреАрдЪ, рддреАрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкрд╣рд▓реВ рд╣реИ рдЬреЛ рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧреА рд╣реИ: рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреЛ рдЫреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдкрд░ рдПрдХ рд╕рд┐рдВрдЧрд▓ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рдирд┐рд╣рд┐рдд рд░рд┐рдЯрд░реНрди рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ function {...} рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рдкрд░реАрдХреНрд╖рдг => ... рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЛ рддреАрд░ рдФрд░ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреА рдХрдореА рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдХреИрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдпрд╣ рд▓рд╛рдкрддрд╛ return рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рдЗрд╕ рддрд░рд╣:

it('does something', () => testProcedureFunction('something','1'))

рдЕрдм рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ! рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рддрд░рд╣ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

it('does something slow', function() {
  this.timeout(10000)
  return testProcedureFunction('somethingSlow','2')
})

рдпрд╛ рд╢рд╛рдпрдж рдХреЛрдИ рдЧрд▓рддреА рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдХрд░реЗрдЧрд╛ (рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ):

it('does something slow', () => {
  this.timeout(10000)
  return testProcedureFunction('somethingSlow','2')
})

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

it('does something slow', when(() => testProcedureFunction('somethingSlow','2'), 10000))

(рдзреНрдпрд╛рди рджреЗрдВ, рдореИрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдКрдкрд░ .timeout(5000) рдбреЙрдЯ-рдЪреЗрдирд┐рдВрдЧ рд╕реБрдЭрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореЛрдЪрд╛ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдХрд╛рд░рдг рдореБрдЭреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ, рдореБрдЭреЗ рдЕрдм рдФрд░ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ, рд╡рд╣ рдПрдХ рджреЗрдЧрд╛ рдкреНрд░рдпрддреНрди!)
(рдиреЛрдЯ 2, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ when рдХрд╛ рдЙрдкрдпреЛрдЧ this рдкреИрд░рд╛рдореАрдЯрд░ рдЙрддреНрдерд╛рдкрди рдЪрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ - рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд╛рдж рдерд╛)ред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рд▓рд┐рдВрдЯрд░ рд╣реЛрдВ рдЬреЛ рд▓рд╛рдкрддрд╛ рд░рд┐рдЯрд░реНрди-рдлреЙрд░-рд╡рд╛рджреЗ рдмрдЧ рдХреЛ рдзреНрд╡рдЬрд╛рдВрдХрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛ рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП rhs рдХреЗ рд╕рд╛рде рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд▓рд╛рдЧреВ рдХрд░рдирд╛)ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрд╕ рд╕рдордп рдпрд╣ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдерд╛, рд╕рд╛рде рд╣реА рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреАрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЫреЛрдЯрд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЗрд╕реЗ (рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рд░реВрдк рд╕реЗ/рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ) рдкрдврд╝рдиреЗ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИ, рдЬрд┐рд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП function рд╕реЗ рддрд░рд╛рдЬреВ рдХреЛ рджреВрд░ рдХрд░ рджрд┐рдпрд╛ .

рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реИред

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

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

https://hacks.mozilla.org/2015/06/es6-in-depth-arrow-functions/

@ рдереЙрдо-рдирд┐рдХ рдпрд╣ it рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди describe ред

describe('my test suite', () => {

  it('test case 1', () => {
    // ...
  }).timeout('10s');  // Works on `it`. This test case doesn't timeout

  it('test case 2', () => {
    // ...
  });  // This test case timeouts.

}).timeout('10s');  // Doesn't work on `describe`. Tests are already created when runs to here.

@ рдереЙрдо-рдирд┐рдХ, рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

describe('my test suite', function() {
this.timeout(n);

...
}

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐ рддреАрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИред

рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛрдИ рдирдИ рдлреИрдВрд╕реА ES6 рдЪреАрдЬрд╝ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдХреНрд▓рд╛рд╕рд┐рдХ function () {} рдХреЛ рдмрджрд▓рдиреЗ рд╡рд╛рд▓реА рд╣реИред рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдЙрджреНрджреЗрд╢реНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЕрдкрдиреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ this рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдХреНрд▓рд╛рд╕рд┐рдХ function () рдХрд╛ рдЕрдкрдирд╛ this ред

рд╣рд╛рдВ, рдкреВрд░реНрдг ES6 рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рднреА, рдЖрдкрдХреЛ рдЕрднреА рднреА function () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╣реА рд╕рдВрджрд░реНрдн рдореЗрдВ this рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдк рдЬреЛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдкрдХреЛ рдЕрдкрдиреЗ ES6 рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ function () рдФрд░ () => рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

this.timeout() it('....', () => { ... }) рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЙрд▓рдмреИрдХ this рдХреЛ рдкреИрд░реЗрдВрдЯ describe() рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ this.timeout() рдирд╣реАрдВ рд╣реИ рдЙрд╕ рд╕реНрддрд░ рдкрд░ рд╕рдордЭреЛред

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

(рдкрд░рдо) => рдПрдХ рд╕рдорд╛рд░реЛрд╣
... рддрдм (рдПрдХ рд╕рдорд╛рд░реЛрд╣)

рдлрд╝рдВрдХреНрд╢рди () {} 'рдЗрд╕' рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди () => 'рд▓реЙрдХ рдЗрди' рд╣реИ

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

рдореИрдВ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдХрднреА рднреА рдлрд╝рдВрдХреНрд╢рди() рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ рдЬрдм рддрдХ рдХрд┐ рдЖрдк 'рдпрд╣' рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп 'рдпрд╣' рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдФрд░ рди рд╣реЛрдВред

@ рдлреНрд▓реЗрдореЗрдВрдХреЛ ...

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

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ _рдмрд┐рд▓реНрдХреБрд▓_ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рд░рдЦ рд░рд╣реЗ рд╣реИрдВред
рдЬрд╣рд╛рдБ рддрдХ "рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рддрд░реНрдХ рднреЗрдЬрдирд╛" рд╣реИ, рд╡рд╕рд╛ рддреАрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рддрд░рд╣ рд╣реА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ: рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд┐рд▓реНрдХреБрд▓ 1 рддрд░реНрдХ рд╣реИ, рддреЛ рдЖрдк рдХреЛрд╖реНрдардХ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

() => console.log("hi"); //zero arguments requires empty parenthesis
a => console.log(a); //you can optionally leave the parenthesis off for 1 argument
(a,b) => console.log(`${a} ${b}`); //2..n arguments requires parenthesis

рдЖрдкрдХреЛ рдЬреЛ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рддрдХ рдЖрдкрдХрд╛ рдлрд╝рдВрдХреНрд╢рди рдПрдХрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ, рддрдм рддрдХ рдореЛрдЯреЗ рддреАрд░ рдЖрдкрдХреЛ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдФрд░ return рдХреАрд╡рд░реНрдб рдХреЛ рдЫреЛрдбрд╝ рдХрд░ _return_ рдПрдХ рдорд╛рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
рддреЛ рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕...

setTimeout(function(a,b) { doSomething(); return calculateSomething(a,b); }, 5000);

... рдФрд░ рдЖрдк рдЗрд╕реЗ рдПрдХ рдлреИрдЯ рдПрд░реЛ рдлрдВрдХреНрд╢рди рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рдЖрдк рдХрд░реНрд▓реА рдмреНрд░реЗрд╕реЗрд╕ рдФрд░ рд░рд┐рдЯрд░реНрди рдХреАрд╡рд░реНрдб рдХреЛ рд╣рд┐рд▓рд╛ рдирд╣реАрдВ рдкрд╛рдПрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдлрдВрдХреНрд╢рди рдмреЙрдбреА рдореЗрдВ рдХрдИ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реИрдВред рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд░реЗрдВрдЧреЗ ...

setTimeout((a,b) => { doSomething(); return calculateSomething(a,b); }, 5000);

рдпрджрд┐, рдмрд▓реНрдХрд┐ рдЖрдкрдиреЗ рд╢реБрд░реБрдЖрдд рдХреА рд╣реИ...

setTimeout(function(a,b) { return calculateSomething(a,b); }, 5000);

... рддреЛ рдЖрдк рдПрдХ рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдирд┐рдкрдЯ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...

setTimeout((a,b) => calculateSomething(a,b), 5000);

рдЗрд╕реЗ рдкрдврд╝рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛!
рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ codefoster.com/levelup-arrays рдкрд░ рдХреБрдЫ рдФрд░ рд▓рд┐рдЦрд╛ред

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЛрдбрд┐рдВрдЧ рд╢реИрд▓рд┐рдпрд╛рдБ рд╣реИрдВ - OOP рд╕реЗ FP рддрдХ, рд╕рдЦреНрдд рдЯрд╛рдЗрдк-рд╕реЗрдлреНрдЯреА рд╕реЗ рд▓реЗрдХрд░ рдорд┐рдХреНрд╕рд┐рди/рдбрдХ-рдЯрд╛рдЗрдкрд┐рдВрдЧ рддрдХред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрди рд╢реИрд▓рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдЙрдиреНрдирдд рдкреИрдЯрд░реНрди рд╣реИрдВ (рдпрд╛рдиреА рдУрдУрдкреА рд╢рд┐рд╡рд┐рд░ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди, рдПрдлрдкреА рд╢рд┐рд╡рд┐рд░ рдореЗрдВ рдХрд░реА/рдореЛрдирд╛рдб)ред

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

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

рдореБрдЭреЗ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ bdd рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ рдЬреЛ this рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп describe , it рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрдн рд╡рд╕реНрддреБ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ

рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, IIRCред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдкреНрд░рдпрд╛рд╕ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЧрдВрднреАрд░ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯреНрд╕ рднреВрдорд┐ рдореЗрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдП рдЧрдП рдпрд╛ рд╕рдВрджрд░реНрдн рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдирд┐рдкрдЯ рдирд╣реАрдВ рд╕рдХрддреЗ?

it("runs immediately", () => {
  // call functions and assert whatever
})
it("runs asynchronously", doneOrContext => {
  setTimeout(() => {
    // call functions and assert whatever
    doneOrContext();
  }, 100)
})



md5-b1fe6f00c87a2916712cf6a4df16e142



it("runs immediately using the parameter as a context", doneOrContext => {
  doneOrContext.configureByMutation("some value");
  // As well as changing config, also flags to Mocha that this test is treating the
  // parameter as a context object and is therefore not async.
  // Call functions and assert whatever
})



md5-b1fe6f00c87a2916712cf6a4df16e142



it("runs asynchronously using the parameter as a context", doneOrContext => {
  doneOrContext.configureByMutation("some value");
  doneOrContext.setAsync(); // Flags to Mocha that even though the parameter has been used as
  // a context object, the test is in fact asynchronous.
  setTimeout(() => {
    // call functions and assert whatever
    doneOrContext();
    // or doneOrContext.done()
  }, 100)
})

рдореИрдВрдиреЗ рдиреАрдЪреЗ рджреА рдЧрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╣реА рдЯрд╛рдЗрдордЖрдЙрдЯ рддреНрд░реБрдЯрд┐ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЧрдпрд╛ред

рдорд╛рдЗрд╕реНрдХреНрд░рд┐рдкреНрдЯ:

рд╡рд░реНрдгрди рдХрд░реЗрдВ ("getBillingDetail", async рдлрд╝рдВрдХреНрд╢рди (){
рдпрд╣ред рд╕рдордпрдмрд╛рд╣реНрдп (55000);
it.only ("рдЪреЗрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╡реИрдз рдЬреЙрдмрдирд╛рдо", async рдлрд╝рдВрдХреНрд╢рди (рдХрд┐рдпрд╛ рдЧрдпрд╛) {
рдпрд╣ред рд╕рдордпрдмрд╛рд╣реНрдп (55000);
рд╡рд░ рдкрд░рд┐рдгрд╛рдо = рдкреНрд░рддреАрдХреНрд╖рд╛ url.getBillingDetail('12254785565647858');
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ (рдкрд░рд┐рдгрд╛рдо);
рдЬреЛрд░ рджреЗрдВред рдмрд░рд╛рдмрд░ (рдкрд░рд┐рдгрд╛рдо, рд╕рддреНрдп);
});
});

рддреНрд░реБрдЯрд┐: 55000ms рдХрд╛ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ред рдПрд╕рд┐рдВрдХреНрд╕ рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╣реБрдХ рдХреЗ рд▓рд┐рдП, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ "рдХрд┐рдпрд╛ ()" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ; рдпрджрд┐ рдХреЛрдИ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╡рд╣ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдХрд┐рд╕реА async рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЙрд▓рдмреИрдХ рдкрд╛рд╕ рди рдХрд░реЗрдВ

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

https://github.com/papercuptech/mocha-lambda

рддреЗрдЬ рддрд░реАрдХрд╛

require('mocha-lambda')
// now a global '_tst' can be used where 'this' was before

describe('suite', () => {
  beforeEach(() => {
    _tst.answer = 42
  })

  it('provides "this" as "_tst"', function() {
    assert(this === _tst)
  })

  it('works', () => {
    assert(_tst.answer === 42)
    _tst.skip()
  })
})

рд╕реНрдкрд╖реНрдЯ рдирд╛рдордХрд░рдг рдХреЗ рд▓рд┐рдП (рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)

// if you were previously explicitly importing api (describe, it, etc.) from 'mocha',
// you will have to change to importing from 'mocha-lambda', until (or if) this
// gets merged into mocha proper
import ctx, {describe as d, it as i} from 'mocha-lambda'

d('suite', () => {
  // ctx() is a function that returns "this" as appropriate
  i('works using ctx()', () => {
    ctx().skip()
  })
})

import {Context} from 'mocha'
// ctx() can also rename global
ctx('t')
declare var t: Context
d('suite', () => {
  // ctx() is a function that returns "this" as appropriate
  i('works using renamed global', () => {
    t.skip()
  })
})

@papercuptech рд▓рд┐рдВрдХ 404 рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред

рд╡реВрдкреНрд╕ .. рдирд┐рдЬреА рд░реЗрдкреЛ рдерд╛ред рдЕрдм рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ

npm i mocha-lambda . рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

@aleung @linesh-simplicity, рдЗрд╕реЗ #3485 . рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

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

рдЗрддрдиреЗ рд╕рд╛рд░реЗ "рдЬрд╛рджреВ" рдХреНрдпреЛрдВ, рдЕрдВрдд рдореЗрдВ, рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддреЗ рд╣реИрдВ? рдпрд╣ рдХреНрдпреЛрдВ рдирд╣реАрдВ ?:

var mocha = require('mocha');

mocha.describe('foo', (suite) => {
  suite.timeout(100);

  suite.it('must love bar', () => ... );  
});

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

@ рдереЙрдо-рдирд┐рдХ рдЙрддреНрддрд░ рджреЗрдЦреЗрдВ, рд╕рд╛рдл рдХрд░реЗрдВ рдФрд░ рдЪрд╛рд▓ рдЪрд▓реА

рдореИрдВ рдХрд╕рдо рдЦрд╛рддрд╛ рд╣реВрдБ рдореИрдВрдиреЗ рдХрд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ рдЖрдк рдРрд╕рд╛ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

describe('a slow thing', () => {
 // test code...
}).timeout(5000);

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

@ рдереЙрдо-рдирд┐рдХ рд╕рдорд╛рдзрд╛рди рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж!

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

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

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

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

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

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

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