Sinon: рд╕реИрдВрдбрдмреЙрдХреНрд╕ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ 'рдЧреИрд░-рдореМрдЬреВрдж рдЕрдкрдиреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд░реЛрдХ рдирд╣реАрдВ рд╕рдХрддрд╛'

рдХреЛ рдирд┐рд░реНрдорд┐рдд 18 рдЕрдЧре░ 2017  ┬╖  14рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: sinonjs/sinon

рдореИрдВрдиреЗ рдЕрднреА 2.4.1 рд╕реЗ 3.2.1 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдФрд░ рдирд┐рдореНрди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ред рдпрд╣ рдХреЛрдб 2.4.1 рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

        const spy = sandbox.spy();
        sandbox.stub(window, 'google').value({
            maps: {
                LatLng: x => x,
                Map: spy
            }
        });

рд▓реЗрдХрд┐рди 3.2.1 рдореЗрдВ рдпрд╣ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ: TypeError: Cannot stub non-existent own property google

рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЧрд╛рдЗрдб рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рд░рд┐рдЧреНрд░реЗрд╢рди рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

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

~рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред~

рдПрдХ рдРрд╕рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬреЛ рдЕрд╕реНрддрд┐рддреНрд╡рд╣реАрди рдЧреБрдгреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реЛред

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

sandbox.stub(serverSecrets, 'the_key_i_need_set').value(fakeValue) рдпрд╣ рдмрддрд╛рдиреЗ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╡рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдорд┐рд▓рддрд╛ рд╣реИ, _рднрд▓реЗ рд╣реА рдореБрдЭреЗ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдкрддрд╛ рди рд╣реЛ рдХрд┐ рдХреБрдВрдЬреА рд╕реЗрдЯ рд╣реИ рдпрд╛ рдирд╣реАрдВред

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

#1512 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рддред

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

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХреНрд╕ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдХрд┐ рдЧреИрд░-рдореМрдЬреВрджрд╛ рдорд╛рдиреЛрдВ рдХреЛ рдардк рдХрд░рдирд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдФрд░ рдЕрд╕рдорд░реНрдерд┐рдд рд╣реИ, рдпрд╛ рдЗрд╕реЗ рд╕рдВрднрд╡ рдмрдирд╛рддреЗ рд╣реИрдВ?

рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдмрд╕ рдЗрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░реЗрдВред

рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рд┐рдиреЙрди рддрдм рдореБрдЭреЗ рдЕрдкрдиреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмреАрдЪ sandbox.restore() рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╛рдл рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЕрддреНрдпрдВрдд рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Google рдорд╛рдирдЪрд┐рддреНрд░ рдЬреИрд╕реЗ рддреГрддреАрдп рдкрдХреНрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рджреМрд░рд╛рди рдЬрд╣рд╛рдВ рдореИрдВ рдПрдкреАрдЖрдИ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЗрд╕реЗ 3.x рд▓рд╛рдЗрди рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рд╕рд╛рде рд╣реА рдореИрдВрдиреЗ рдЕрднреА рджреЗрдЦрд╛ рдХрд┐ рдореИрдВрдиреЗ рдПрдХ рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рди рджреЗрдиреЗ рдХрд╛ рдкрд╛рдк рдХрд┐рдпрд╛ рд╣реИред рдореЗрд░рд╛ рд╕реИрдВрдбрдмреЙрдХреНрд╕ 2.4.1 рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ:

let sandbox;

before(() => { sandbox = sinon.sandbox.create(); })
afterEach(() => { sandbox.restore(); })

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдЬреИрд╕реЗ @ZebraFlesh рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдЯреЗрдХреНрд╕реНрдЯ рдлрд┐рдХреНрд╕реНрдЪрд░ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред

// not so explicit, doesn't work with [email protected]
beforeEach(function() {
    const spy = sandbox.spy();
    sandbox.stub(window, 'google').value({
        maps: {
            LatLng: x => x,
            Map: spy
        }
    }); 
});
// more explicit, works with sinon<strong i="9">@2</strong>, sinon<strong i="10">@3</strong>
function setGoogleMapsFixture(sandbox) {
    window.google = {
        maps: {
            LatLng: x => x,
            Map: sandbox.spy()
        }
    };
}

function removeGoogleMapsFixture() {
    delete window.google;
}

beforeEach(function() {
    setGoogleMapsFixture(sandbox)
});

// not using afterEach, as this only needs to happen
// after the last test in this block is run
after(function() {
    removeGoogleMapsFixture();
});

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

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХреНрд╕ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдХрд┐ рдЧреИрд░-рдореМрдЬреВрджрд╛ рдорд╛рдиреЛрдВ рдХреЛ рдардк рдХрд░рдирд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдФрд░ рдЕрд╕рдорд░реНрдерд┐рдд рд╣реИ, рдпрд╛ рдЗрд╕реЗ рд╕рдВрднрд╡ рдмрдирд╛рддреЗ рд╣реИрдВ?

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреИрд░-рдореМрдЬреВрджрд╛ рд╕реНрд╡рдпрдВ рдХреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрдирд╛ рдЕрд╕рдорд░реНрдерд┐рдд рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@mroderick рдореИрдВ

рддреЛ рдпрд╛ рддреЛ:

  • рдЗрд╕ рдмреНрд░реЗрдХрд┐рдВрдЧ рдлреАрдЪрд░ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХреЛ рддреБрд░рдВрдд рд╣рдЯрд╛ рджреЗрдВ

рдпрд╛ рдФрд░(?)

  • рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╡рд╛рд▓реЗ рджреЛрдиреЛрдВ рд╕реНрдЯрдмреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ

    • рдЕрджреНрдпрддрди рдбреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рдирдпрд╛ рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд░реЗрдВ

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

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

it('handles the success case', () => {
        const spy = sandbox.spy();
        sandbox.stub(window, 'google').value({
            maps: {
                LatLng: x => x,
                Map: spy
            }
        });
        // ... test, including asserting that the spy was called
});

it('handles the failure case', () => {
        const msg = 'test error';
        sandbox.stub(window, 'google').value({
            maps: {
                LatLng: x => x,
                Map: sandbox.stub().throws(new Error(msg))
            }
        });
        // ... test, ignoring spy calls and instead focusing on error handling
});

2.x рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рдж sandbox.restore() рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдм рдХреБрдЫ рдареАрдХ рд╕реЗ рд╕рд╛рдл рд╣реЛрдиреЗ рдХрд╛ рд▓рд╛рдн рд╣реИред рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╕реНрдерд┐рд░рддрд╛ рд╕реЗрдЯрдЕрдк рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП afterEach рд╣реБрдХ рдореЗрдВ рдЧреИрд░-рд╕реНрд╡рдпрдВ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдо рдЯрд╛рдЗрдк рдХрд░рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд┐рдиреЙрди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

  • stub.ownValue() : рдХреЗрд╡рд▓ рдЕрдкрдиреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╕реНрдЯрдмреНрд╕ рдХрд░рддрд╛ рд╣реИ, рдЧреИрд░-рд╕реНрд╡рдпрдВ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдлреЗрдВрдХрддрд╛ рд╣реИ
  • stub.value() : рдХреЗрд╡рд▓ рдЧреИрд░-рд╕реНрд╡рдпрдВ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рд╕реНрдЯрдмреНрд╕ рдХрд░рддрд╛ рд╣реИ, рд╕реНрд╡рдпрдВ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдлреЗрдВрдХрддрд╛ рд╣реИ

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

рдпрд╣ #1508 (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдЯрдмреНрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ) рдореЗрдВ рдЪрд░реНрдЪрд╛ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЬрд╣рд╛рдВ @lucasfcosta рдХрд╛ рд╡рд┐рд░реЛрдзреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ - рдХрд┐ рд╣рдореЗрдВ undefined рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП _рдлреЗрдВрдХрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддреЗ рд╣реИрдВ, рдореЗрд░рд╛ рджреГрдврд╝ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдЯрдмреНрд╕ рдФрд░ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрдмрд┐рдВрдЧ рдПрдкреАрдЖрдИ рдореЗрдВ _рд╣рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдмрдиреЗ рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ рдирд╣реАрдВред

рдЕрднреА рдпрд╣ рд╣реИ рд╕реНрдерд┐рддрд┐ :

  • рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдЯрдмреНрд╕ 1.x рдореЗрдВ рдлреЗрдВрдХрддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдпрд╣ 2.0 рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ рдФрд░ рдЕрдм рдирд╣реАрдВ рдлреЗрдВрдХрддрд╛
  • рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рдереЗ, рд▓реЗрдХрд┐рди 3.1 (?)

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

рдЬрдмрдХрд┐ рдореИрдВ рдЕрд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдиреНрдпреВрдирддрдо рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрд╕рд╛рди рд╕рдорд╛рдзрд╛рди рд╣реИред

before(function() {
  window.google = 'This is a placeholder for sinon to overwrite.';
});

after(function() {
  delete window.google;
});

рдпрд╣ рд╕рд┐рдиреЙрди рдХреЛрдб рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд░рд┐рдЧреНрд░реЗрд╢рди рдмрдирд╛рдо рдЦрд░рд╛рдм рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг

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

@fearphage рдпрдерд╛рд╕реНрдерд┐рддрд┐ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЧреИрд░-рдореМрдЬреВрджрд╛ рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реНрдЯрдм рдХрд░рдирд╛ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрд╕рдорд░реНрдерд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рдЬрдмрдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдЯрдмреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдереЛрдбрд╝рд╛ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рджреЛ рдлреАрдЪрд░ рд╕реЗрдЯ рд╕рдВрд░реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ?

#1557 . рдореЗрдВ рд╕рдВрдХрд▓реНрдк рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рд╛рдпрдж рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреЗрдПрд╕ рдореЗрдВ рднреА рдпрд╣ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ myObject.callMe() рдкреВрд░реА рддрд░рд╣ рдЦреБрд╢реА рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдЧрд╛, рдЬрдмрдХрд┐ sinon.stub(myObject, "callMe") рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореИрдВ рдЗрд╕ рдмрд╛рдд рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЙрд╕ рд╡рд┐рд╢реЗрд╖ рд╡рд╕реНрддреБ рдХреЛ рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд░реЛрдХрдирд╛ рд╣реИред

рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЗрдПрд╕ рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХ рдореВрд▓ рд╕рдорд░реНрдерди рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ, рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реИред

рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рд╡рд╕реНрддреБ рдкрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рддреЛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рддреНрд░реБрдЯрд┐ рд╕рдВрднрд╡рддрдГ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реИред рдлрд┐рд░ myObject.callMe = sinon.stub(); рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реАрдзреЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ IMHO рдХреЗ рд▓рд┐рдП рдЗрддрдиреА рдкрд░реЗрд╢рд╛рдиреА рдХреА рддрд░рд╣ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ ... рдЖрдкрдХреЛ рдХреНрд▓реАрдирдЕрдк/рдЯрд┐рдпрд░рдбрд╛рдЙрди рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рд╕реЗ рднреА рдмрдЪрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рдЧрдпрд╛ рдерд╛ред

рд╣рд╛рдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдореБрдЭ рдкрд░ рдЕрдзрд┐рдХ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рднрд╛рд░ рдбрд╛рд▓ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЪреАрдЬреЛрдВ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

~рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред~

рдПрдХ рдРрд╕рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬреЛ рдЕрд╕реНрддрд┐рддреНрд╡рд╣реАрди рдЧреБрдгреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реЛред

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

sandbox.stub(serverSecrets, 'the_key_i_need_set').value(fakeValue) рдпрд╣ рдмрддрд╛рдиреЗ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╡рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдорд┐рд▓рддрд╛ рд╣реИ, _рднрд▓реЗ рд╣реА рдореБрдЭреЗ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдкрддрд╛ рди рд╣реЛ рдХрд┐ рдХреБрдВрдЬреА рд╕реЗрдЯ рд╣реИ рдпрд╛ рдирд╣реАрдВред

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

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

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

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

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

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

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