Sinon: рдЬрд╛рд╕реВрд╕ `рд░рд┐рдЯрд░реНрдирд╡реИрд▓реНрдпреВ` рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 3 рдЬрдире░ 2015  ┬╖  20рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: sinonjs/sinon

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

require('should');

var sinon = require('sinon');
var co = require('co');

var foo = {
  bar: function() {
    return 'bar';
  },
  biz: function *() {
    return 'biz';
  }
}

describe('Return value', function() {
  it('should work with regular functions', function() {
    sinon.spy(foo, 'bar');

    foo.bar();

    foo.bar.firstCall.returnValue.should.equal('bar');
  });

  it('should work with generator functions', co.wrap(function*() {
    sinon.spy(foo, 'biz');

    var result = yield foo.biz();

    result.should.equal('biz');
    foo.biz.firstCall.returnValue.should.equal('biz');
  }));
});

npm install co mocha should sinon && ./node_modules/.bin/mocha --harmony index.js рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдВред

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

рд╕рд┐рдиреЙрди рдЕрднреА рддрдХ ES6 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкрд░ рдЕрднреА рдХрд╛рдо рд╢реБрд░реВ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ рдЗрд╕рд▓рд┐рдП рдкрддрд╛ рдирд╣реАрдВ рдпрд╣ рдХрдм рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

@mantoni , рдареАрдХ рд╣реИ, рдпрд╣ рдПрдХ рдлреАрдЪрд░ рдЕрдиреБрд░реЛрдз рд╕реЗ рдЕрдзрд┐рдХ рдерд╛ :) рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреИрдЧ ("es6"?) - рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

рдпрд╣ рдПрдХ рдмрдбрд╝реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрдЧреАред

@ruimarinho рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓рд╛ https://github.com/ingameio/SinonES6.JS
рдЖрд╡рд╢реНрдпрдХрддрд╛ ("sinon") рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ ("sinon-es6") рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рд╕реЗ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ

--
22 рдЬреВрди 2017 рдХреЛ @ fatso83 рджреНрд╡рд╛рд░рд╛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд▓рдЧрддрд╛ред рдореИрдВрдиреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред рдпрд╣ рд╕рднреА рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рдЬреЛ рдХреБрд▓ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ sinon-es6 _ рдХреЗрд╡рд▓ _ рдХрд╛ рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕рдорд░реНрдерди рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ?

@emgeee рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИред

+1 @ruimarinho sinon.js es6 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛!

@ingameio рдЕрдкрдиреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреАрдЖрд░ рдмрдирд╛рдиреЗ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ?

@ fatso83 рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдореИрдВ рдЬрд▓реНрдж рд╣реА рдкреАрдЖрд░ рдХрд░реВрдБрдЧрд╛;)

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

@gaguirre рдпрд╣ рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИред рдореИрдХреНрд╕рд┐рдорд┐рд▓рд┐рдпрди рдиреЗ рдЕрднреА-рдЕрднреА рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдореЛрдЪрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рджреМрд░рд╛рди рдкрд░реАрдХреНрд╖рдг рд╕реЗрдЯрдЕрдк рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк master рд╕реЗ рдирд╡реАрдирддрдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЪреАрдЬреЗрдВ рдХрд╛рдо рдХрд░реЗрдВ?

@gaguirre рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рдзрд╛рдЧреЗ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЖрдкрдХреЗ рдХрд╛рдВрдЯреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЛ рдзрдХреНрдХрд╛ рджреЗрдирд╛ рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдПрдХ рд░рд╛рд╣рдЧреАрд░ рдЗрд╕реЗ рджреЗрдЦ рд╕рдХреЗред

@ fatso83 рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдВрдбрд░рд╕реНрдХреЛрдк/рд╕рд┐рдиреЙрди рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ред
рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдПрдХ рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдЬреЛ es6 (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░реЗрдд) рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╕рдордп рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ eval() рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдХреЛрд╢рд┐рд╢ рд╕реЗ рдШрд┐рд░рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ/ рдкрдХрдбрд╝ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рд╣реИред

рдЕрднреА рдореИрдВ рдЬреЗрдирд░реЗрдЯрд░ рдХреЙрд▓ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рднреА рдмрдВрдбрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ npm run test-headless рдЪрд▓рд╛рддреЗ рд╕рдордп рдХреБрдЫ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

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

рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬрд╛рдВрдЪ рдХреЛ рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЙрддрдирд╛ рд╣реА рд╕рд░рд▓ рд╣реИ рдЬрд┐рддрдирд╛ if(require('generator-support')){ ... } , рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

@mantoni рдФрд░ @mrodrick рд╕реЗ рдХреИрд╕реЗ рд╕рдлрд╛рдИ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рдкреБрдирд╢реНрдЪ рдореИрдВ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдореЗрдВ рдСрдлрд╝рд▓рд╛рдЗрди-рдЕрд╡рдХрд╛рд╢ рдкрд░ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдИрд╕реНрдЯрд░ рдХреЗ рдХреБрдЫ рд╕рдордп рдмрд╛рдж рддрдХ рдЙрддреНрддрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

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

рд╕реБрдЭрд╛рд╡ :

рдЬреЗрдирд░реЗрдЯрд░ рдХреЛрдб рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдХрд╛рд▓реЗрдВ рдФрд░ require() рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреЗрд╡рд▓ рдорд╛рдВрдЧ рдкрд░ рдЬреЗрдирд░реЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рдкреЗрдЯрддреЗ рд╕рдордп рдирд┐рдХрд╛рд▓реЗрдВ, рдпрд╛рдиреА:

?/es6-support.js:

"use strict";

exports.getGeneratorWrapper = function(method, ctx, args) {
    return function* () {
        return mockObject.invokeMethod(method, ctx, args);
    }
}

lib/sinon/mock.js->рдЙрдореНрдореАрдж...:

var wrapper = function () {
    return mockObject.invokeMethod(method, this, arguments);
});

if (/^function\s*\*/.test(method.toString())) {
    wrapper = require('es6-support').getGeneratorWrapper(method, this, arguments);
}

wrapMethod(this.object, method, wrapper);

(рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд░реЗрдВ, рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХреА рдЯреНрд░реИрдХрд┐рдВрдЧ 'es6-support' рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдирддреА рд╣реИред)

рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реБрдЭрд╛рд╡ :

рдЬрдм рддрдХ sinon 2.0 рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛, рдХреНрдпрд╛ ES5 рд╕рдВрдЧрддрддрд╛ рдЕрднреА рднреА рдПрдХ рд╕рд╛рд░реНрдердХ рдЙрджреНрджреЗрд╢реНрдп рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣реА рд╣реИ? рд╢рд╛рдпрдж рдЕрдм рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рд╡реЗ рдЕрднреА рднреА рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рд░рд╛рд╕рдд ES5-only рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╡реЗ 1.x рдкрд░ рдкреАрдЫреЗ рд░рд╣ рдЬрд╛рдПрдВрдЧреЗред

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

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

рдореМрдЬреВрджрд╛ ES5 рд░рдирдЯрд╛рдЗрдо рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝реЗ рдмрд┐рдирд╛ ES6 рд╕рдВрдЧрддрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ рдЬреЛ рдореИрдВ ith рдкрд░ рдЖ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ (рдЗрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ):

рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕рд╢рд░реНрдд рдореВрд▓реНрдпрд╛рдВрдХрди

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

рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ brfs рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬрд╝ рдореМрдЬреВрдж рд╣реИ, рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

_рд░рдирдЯрд╛рдЗрдо-рдлреАрдЪрд░реНрд╕.рдЬреЗрдПрд╕_

var features = {};
try { 
    new Function("var foo = function* foo(){ }") ;
    features.generatorSupport = true; 
} 
catch(err){ features.generatorSupport = false; }
module.exports = features;

_es6-рдЬрдирд░реЗрдЯрд░-рдЖрд╡рд░рдг.js_

return function* () {
    return mockObject.invokeMethod(method, ctx, args);
}

_es6.js_

var features = require('./runtime-features');

if( features.generatorSupport ) {
    var code = fs.readFileSync('./es6-generator-wrapper.js');
    module.exports.getGeneratorWrapper = new Function("mockObject", "method", "ctx", "args", code);
} else {
    module.exports.getGeneratorWrapper = function() { throw new TypeError("You tried using a generator function in a runtime only capable of running ES5 code"); }
}

рдмреЗрдмреЗрд▓рд┐рдлрд╛рдЗрдВрдЧ рд╕рд┐рдиреЛрди

рдпрд╣ рд╡рд╣ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИред рдпрджрд┐ рд╣рдо рдмрд┐рд▓реНрдб рдХреЛ рдмреИрдмреЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ ES5 рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рднреА рдЬрдЧрд╣ ES6 рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣реБрдкреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреВрджрдиреЗ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдореИрдВрдиреЗ рдКрдкрд░ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рд╣рдо рдЕрднреА рднреА рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪреЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рд╕рд┐рд░реНрдл ES5 рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдмреЗрд╢рдХ, ES5 рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ ES6 рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдЕрднреА рднреА рд╡рд┐рдлрд▓ рд╣реЛрдЧрд╛ред рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рд╕рдорд╛рди рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдпреЛрдЧрджрд╛рди рдореЗрдВ рдмрд╛рдзрд╛ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ yield , async , function*() рдЬреИрд╕реЗ рд╕рд╛рдорд╛рди рдкрд░ ES2015 рдЬреНрдЮрд╛рди рдкрд╣реБрдВрдЪ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред рдПрдХ рд╡реНрдпрд╛рдкрдХ рджрд░реНрд╢рдХред

+1

@rpavlovs , рдереНрд░реЗрдб рдореЗрдВ +1 рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреА рднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ GitHub UI рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ "рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЬреЛрдбрд╝реЗрдВ" рдмрдЯрди рд╣реИред рдПрдХ +1 рдХреБрдЫ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдЬреЛ рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕реБрдЭрд╛рд╡реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ (рдпрд╛ рдХреБрдЫ рдФрд░ рдЪрд╛рд▓рд╛рдХ), рджреВрд╕рд░реА рдУрд░, рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рдореМрдХрд╛ рд╣реИ

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

рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдирдИ рд╢рд╛рдЦрд╛ рдмрдирд╛рдИ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирдХрд▓реА рдПрдкреАрдЖрдИ рдореЗрдВ @ingameio рдХреЗ рд╕рдВрд╢реЛрдзрди рд╣реИрдВ, рдЬрдмрдХрд┐ рд╕рд╛рде рд╣реА ES5 рд╕рдВрдЧрддрддрд╛ (рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣реИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЛ рддреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рд╣реИред

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

рдЬреЗрдирд░реЗрдЯрд░ рд╕рд░рд▓ рдЪреАрдЬреЗрдВ рд╣реИрдВ: рдХреЛрдорд▓ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╛рдгреА рдЬреЛ рдЕрдкрдиреЗ рдЕрддреАрдд рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВред рддреЛ рдХреГрдкрдпрд╛ рдХрд┐рд╕реА рднреА рдЙрджрд╛рд╣рд░рдг рдХреЛ co рдФрд░ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдкрд╣реЗрд▓реА рди рдХрд░реЗрдВ рдЬреЛ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдпрд╣ рджреЗрдЦрдирд╛ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ/рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖ рдЙрджрд╛рд╣рд░рдг рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реИ, рдФрд░ рдпрд╣ рднреА рдЧрд▓рддреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ yield рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ "рдЙрдкрдЬ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐" рдХреЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЛ "рдЙрдкрдЬ рдореВрд▓реНрдп" рдХреЗ рд╕рдорд╛рди рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдЙрдкрдЬ рдХрд╛ result рдЬрдирд░реЗрдЯрд░ рдХреЗ next() ( MDN ) рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рди рд╣реИ

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

рдпрд╣ рдПрдХ рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЬрдирд░реЗрдЯрд░ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ (рдЖрдЬ рдХреЗ рд╕рд┐рдиреЙрди рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ):

require("should");

var sinon = require("../sinon");

var foo = {
    bar: function () {
        return "bar";
    },
    biz: function *() {
        return "biz";
    }
};

describe("generator support", function () {
    it('should work with generator functions',  function(){
        var spy = sinon.spy(foo, 'biz');

        var iterator = foo.biz();
        var result = iterator.next();

        result.value.should.equal('biz');
        result.done.should.equal(true);
        spy.firstCall.returnValue.should.be.an.Object();
        spy.firstCall.returnValue.next.should.be.a.Function();
    });
});

рдЕрдм, рд╣рдо рдХреМрди рд╕реЗ API рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рдореВрд▓ рдкрд░реАрдХреНрд╖рдг рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ

foo.biz.firstGeneratedValue.should.equal('biz');
рдпрд╛
foo.biz.generatedValue[0].should.equal('biz');
?

рд╕реАрд╕реА @ruimarinho

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

рдХреГрдкрдпрд╛ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ рдХрд┐ рдЬреЗрдирд░реЗрдЯрд░ (рдФрд░ рдЗрд╕рд╕реЗ рдЬреБрдбрд╝реЗ рдЗрдЯрд░реЗрдЯрд░реНрд╕) рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ #1467 рдЕрдВрдХ рдореЗрдВ рдХреИрд╕реЗ рджрд┐рдЦреЗрдЧрд╛

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

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

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

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

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

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

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