Sinon: рдХрдИ .withArgs рдХреЗ рд╕рд╛рде sinon.stub() рдХреЛ рдЪреЗрди рдХрд░рдирд╛ рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдШреЛрд╖рдгрд╛ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рд╕рд┐рддре░ 2012  ┬╖  23рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: sinonjs/sinon

рдХрдИ .withArgs рдХреЗ рд╕рд╛рде sinon.stub() рдХреЛ рдЪреЗрди рдХрд░рдирд╛ рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдШреЛрд╖рдгрд╛ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ

var stubbedFunction = sinon.stub().withArgs(argument1).returns(value1).withArgs(argument2).returns(value2);

рддрдм рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдШреЛрд╖рдгрд╛ (.withArgs(argument2).returns(value2)) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдардк рд╣реИ

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

рдпрд╣ рд╕рд┐рдиреЙрди 1.7.3 рдХреЗ рд╕рд╛рде рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ:

var s = sinon.stub();
s.withArgs(1).returns('a');
s.withArgs(2).returns('b');
s(1); // -> 'a'
s(2); // -> 'b'
s(3) // -> undefined

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

withArgs рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рдореВрд▓ рд╕реНрдЯрдм рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП +1ред рд╕рдВрдмрдВрдзрд┐рдд рдиреЛрдЯ рдкрд░, рдореИрдВ withArgs рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЧреИрд░-рдорд┐рд▓рд╛рди рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╡рд┐рдзрд┐ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдореИрдВ Node.js fs.readFileSync() рд╡рд┐рдзрд┐ рдХреЛ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рд┐рдиреЙрди рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрдирд╛рдП рд░рдЦреЗ рддрд╛рдХрд┐ require() (рдЬреЛ readFileSync рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ) рдЯреВрдЯрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрдмреНрдб рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

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

beforeEach(function() {
  global.fs = require('fs');
  sinon.stub(fs, 'readFileSync').onlyWithArgs('my-file.txt').returns('Contents of file');

  // Then require the module under test, which uses fs.readFileSync() internally
  // require() uses original method with correct calling context
  global.myModule = require('../src/my-module');
});

afterEach(function() {
  fs.readFileSync.restore();
});

it('does something with the file', function() {
  expect(myModule.loadFromFile()).toEqual('Contents of file');
});

рдореИрдВ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдкреЛрд╕реНрдЯ @froots рдХреЛ рдбреЙрдХреНрд╕ рдореЗрдВ рдХрд╣реАрдВ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред require рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреНрдп рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдирдХрд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЦреЛрдЬ рдХреА

рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ред рдЙрд╕ рдкрд░ рд╡рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? http://github.com/cjohansen/sinon-web/

рдпрд╣ рд╕рд┐рдиреЙрди 1.7.3 рдХреЗ рд╕рд╛рде рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ:

var s = sinon.stub();
s.withArgs(1).returns('a');
s.withArgs(2).returns('b');
s(1); // -> 'a'
s(2); // -> 'b'
s(3) // -> undefined

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

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

рдореИрдВ @mantoni рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рд╕реНрдЯрдм рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗрд╡рд╛/рдХреНрд╡реЗрд░реА рдХреА рд╕рдВрд╡рд┐рджрд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рд╣реИред рдпрд╣ рд╢реИрд▓реА рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░рддреА рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рд╢рд╛рдпрдж рдпрд╣рд╛рдВ рд╕реБрдзрд╛рд░рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛:

var someObj = {
    someProp: sinon.stub().withArgs("foo").returns(true)
}

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд░рд╛рджрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди, рдЗрд╕рд╕реЗ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реБрдЖред someObj.someProp рдХреЗ рдмрдЬрд╛рдп рдЬрдм foo рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╣рдореЗрд╢рд╛ true рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ returns рдХреНрд▓реЙрдЬ рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ, someObj.someProp рдЗрдирдкреБрдЯ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд░реНрддрд╡реНрдпрдкреВрд░реНрд╡рдХ true рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдореИрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдкреАрдЫреЗ рдХреЗ рддрд░реНрдХ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЧреБрдорд░рд╛рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд▓реМрдЯрд╛рдИ рдЧрдИ рд╡рд╕реНрддреБрдПрдВ рдХреНрдпрд╛ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдХреЙрд▓рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐рдпрд╛рдВ рд╕реНрдЯрдмреНрд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдПрдкреАрдЖрдИ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдХреЛрдИ рдпрд╣ рдХреНрдпреЛрдВ рдорд╛рдиреЗрдЧрд╛ рдХрд┐ рд╡реЗ _were_ рд╕реНрдЯрдмреНрд╕ рд╣реИрдВред

рдореИрдВ @jasonkarns рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдореИрдВ рдмрд╕ рдЙрд╕реА "рдЬрд╛рд▓" рдореЗрдВ рдЧрд┐рд░ рдЧрдпрд╛: рд╕реНрдЯрдм рдШреЛрд╖рдгрд╛ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕реНрдЯрдм рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЪреЗрдирд┐рдВрдЧ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддреА рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ:

var someObj = {
    someProp: sinon.mock().withArgs("foo").returns(true)
}

рдЗрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ?

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ @froots рдмрд┐рдВрджреБ рдЕрдм рд╕рдВрднрд╡ рд╣реИ? рдпрд╣ рдХрд░рдирд╛ рдкрдбрд╝рд╛:

sinon.stub(fs, 'readdirSync', (dir) => {
    if (dir === 'foo-path') {
        return [
            'my.js',
            'fake.js',
            'stuff.js'
        ];
    }

    return fsReaddir(dir);
});

рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛:

var myStub = sinon.stub(fs, 'readdirSync', fs.readdirSync);

myStub
    .withArgs('foo-path')
    .returns([
        'my.js',
        'fake.js',
        'stuff.js'
    ]);

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рддрдп рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг [email protected] . рдХреЗ рдЗрд░рд╛рджреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

var Dummy = {
    doSomething: function(something) {
        return 'doing ...' + something;
    }
}

sinon.stub(Dummy, 'doSomething')
    .withArgs('sleep').returns('sleepy')
    .withArgs('eat').returns('eating');

console.log(Dummy.doSomething('sleep'));
console.log(Dummy.doSomething('eat'));

@ valentin-radulescu-hs рдпрд╣ рдЕрднреА рднреА 1.17.7 рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдкрдХреНрд╖ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред
рдпрд╣ рдЕрднреА рднреА рдирд╡реАрдирддрдо returns рдХреЛ рдПрдХрдорд╛рддреНрд░ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА withArgs (рдЬреИрд╕рд╛ рдХрд┐ @jasonkarns рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ https://github.com/sinonjs/sinon/issues/176#issuecomment- 78191790)ред

рдореЗрд░реЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ @mantoni рдХрд╛ рдЬрд╡рд╛рдм https://github.com/sinonjs/sinon/issues/176#issuecomment -33636496, withArgs() рдХрд╛ рдкреАрдЫрд╛ рди рдХрд░рдХреЗред

var s = sinon.stub();
s.withArgs(1).returns('a');
s.withArgs(2).returns('b');

@zurfyx рдХреНрдпрд╛ рдЖрдк рдиреЛрдб рдкрд░ рдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ? рдЖрдк рдХрд┐рд╕ рдиреЛрдб/рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдкрдиреЗ рдЕрдВрдд рдореЗрдВ рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдФрд░ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдЕрд░реЗ @ рд╡реИрд▓реЗрдВрдЯрд╛рдЗрди-рд░рд╛рдбреНрдпреВрд▓рд╕реНрдХреБ-рдПрдЪрдПрд╕ред рдореИрдВ рдЗрд╕реЗ babel-cli 6.22.2 . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдиреЛрдб рдкрд░ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ

  • рдиреЛрдб 6.9.4
  • рдПрдирдкреАрдПрдо 3.10.10

рджреЗрд░ рд╕реЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ

@zurfyx рдореИрдВрдиреЗ рдЙрд╕реА рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рдерд╛ рдФрд░ рдпрд╣ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрдВрд╕реЛрд▓ sleepy рдФрд░ eating рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рд╕рдорд╕реНрдпрд╛ рдХреНрдпреЛрдВ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ ЁЯШв

@zurfyx рдмрд╕ _totally_ рдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдЖрдкрдиреЗ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ?

grep version node_modules/sinon/package.json
rm -r node_modules
rm npm-shrinkwrap
npm install
grep version node_modules/sinon/package.json

рдЬреНрдпрд╛рджрд╛рддрд░ рдмрд╛рд░ рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ, рдпрд╣ рдкреИрдХреЗрдЬ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдХрд╛рд░рдг рд╣реИ, рдореИрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЬреЛ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ рдЬреИрд╕рд╛ рдирд╣реАрдВ рд╣реИред

@ fatso83 рдпрд╣ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред grep рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрд╕реНрдХрд░рдг рдЕрднреА рднреА 1.1.7.7 рд╣реИред

рдпрд╣ рдореЗрд░реА рдкреВрд░реА рдкрд░реАрдХреНрд╖рд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

  it('test', () => {
    const s = sinon.stub();
    s.withArgs('a').returns('1');
    s.withArgs('b').returns('2');

    console.info(s('c'));
  });

s('a') : '1'
s('b') : '2'
s('c') : undefined

  it('test', () => {
    const s = sinon.stub()
      .withArgs('a').returns('1')
      .withArgs('b').returns('2');

    console.info(s('c'));
  });

s('a') : '2'
s('b') : '2'
s('c') : '2'

рдореИрдВ sinon.createStubInstance рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВред

const stub = sandbox.stub();
      const myObj = function(){};
      const objOne = sinon.createStubInstance(myObj);
      const objTwo = sinon.createStubInstance(myObj);
      stub.withArgs(objOne).returns('1');
      stub.withArgs(objTwo).returns('2');

      console.info(stub(objOne));
      console.info(stub(objTwo));

рдЖрдЙрдЯрдкреБрдЯ:
2 2

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ sinon.createStubInstance рдХреЛ рдПрдХ рдирдпрд╛ рд╕реНрдЯрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рдерд╛ред рдХреНрдпрд╛ рдпрд╣ рдЧрд▓рдд рд╣реИ?

рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╢реНрди рдЗрд╕ рдзрд╛рдЧреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рд╕реЗ рдХреБрдЫ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реИред sinon 1.17.7 рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдореИрдВ рдХрдИ withArgs рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕ рдХреЛ рдЪреЗрди рдХрд░рддрд╛ рдерд╛, рдЬрд╣рд╛рдВ рдЖрдЦрд┐рд░реА рд╡рд╛рд▓рд╛ рдПрдХ "рдЧреНрд░реИрдм-рдСрд▓" рдореИрдЪрд░ рдерд╛ рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

const s = sinon.stub();
s.withArgs(1).returns(1)
 .withArgs(2).returns(2)
 .withArgs(sinon.match.any).returns('my-default-value')

s(1) // 1
s(5) // my-default-value

рдЕрдм рдореИрдВ 4.1.3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд╣рдореЗрд╢рд╛ my-default-value рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдЗрд░рд╛рджрд╛ рдерд╛? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреНрдпрд╛ withArgs рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ/рдлрд╝реЙрд▓рдмреИрдХ рдорд╛рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

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

рдорд╛рдВрдж рдЖрджрдореАред 15. рдЬрди. 2018, 11.13 рд╕реНрдХреНрд░реЗрд╡ рдбреЗрд╡рд┐рдб рдЧрд╛рд░реНрд╕рд┐рдпрд╛ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com :

рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╢реНрди рдЗрд╕ рдзрд╛рдЧреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рд╕реЗ рдХреБрдЫ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реИред sinon 1.17.7 I . рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ
рдХрдИ withArgs рдХрдердиреЛрдВ рдХреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛рдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рдЕрдВрддрд┐рдо рдПрдХ рдерд╛ a
"рдЧреНрд░реИрдм-рдСрд▓" рдореИрдЪрд░ рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

const s = sinon.stub();s.withArgs(1).returns(1)
.withArgs(2).рд░рд┐рдЯрд░реНрди(2)
.withArgs(sinon.match.any).returns('my-default-value')
s(1) // 1s(5) // my-default-value

рдЕрдм рдореИрдВ 4.1.3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд╣рдореЗрд╢рд╛ рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИ
рдореЗрд░рд╛-рдбрд┐рдлрд╝реЙрд▓реНрдЯ-рдорд╛рдиред рдХреНрдпрд╛ рдпрд╣ рдЗрд░рд╛рджрд╛ рдерд╛? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреНрдпрд╛ a . рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?
withArgs рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ/рдлрд╝реЙрд▓рдмреИрдХ рдорд╛рди?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/sinonjs/sinon/issues/176#issuecomment-357638653 , рдпрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
рд╕реВрддреНрд░
https://github.com/notifications/unsubscribe-auth/AAluXMzqALJ0JlAM3hUaiK1SSyca9H74ks5tKyS4gaJpZM4AK2eu
.

>

[рдЫрд╡рд┐:--]

рдХрд╛рд░реНрд▓-рдПрд░рд┐рдХ рдХреЛрдкреНрд╕реЗрдВрдЧ
[рдЫрд╡рд┐: https://]about.me/kopseng
https://about.me/kopseng?promo=email_sig&utm_source=email_sig&utm_medium=email_sig&utm_campaign=external_links

@ fatso83 рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрдо рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рдпрд╣ рдЙрджреНрджреЗрд╢реНрдп рдкрд░ рдерд╛ ред рдореЗрд░реЗ рд▓рд┐рдП, рдкрд┐рдЫрд▓реЗ withArgs рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдлреЙрд▓рдмреИрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рдЧрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЗрд╡рд▓ рдСрд░реНрдбрд░ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдФрд░ .withArgs(sinon.match.any) рдХреЛ рдкрд╣рд▓реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рдЦрдирд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ

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

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

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

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

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

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

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