sinon.stub
/ sandbox.stub
ã¯ã®å°æã®æµãå°ã«ãªããŸãã
ãªã°ã¬ãã·ã§ã³ãªãã§èŠã€ããŠä¿®æ£ããã®ãé£ããããšãå€ãåé¡ã䌎ãæ§æå¯èœãªåäœã
å°é£ã®æ ¹æ¬çãªåå ã¯ã stub
ã®è²¬ä»»ãå€ãããããšã ãšæããŸãã
ããã«ã stub
ã¯ãåäœãäœæãããåŸã«èšå®ãããäœåºŠãåå®çŸ©ãããå¯èœæ§ããããããåé¡ã®ãã䜿çšæ³ããããŸãã
var myStub;
beforeEach(function(){
myStub = sinon.stub().resolves('apple pie :)');
});
// several hundred lines of tests later
myStub = sinon.stub().rejects('no more pie :(');
// several hundred lines of tests later
// what behaviour does myStub currently have? Can you tell without
// reading the entire file?
// can you safely change the behaviour without affecting tests further
// down in the file?
ãããŠããã£ãšçŽããããã·ããªãªããããŸã
var myStub = sinon.stub()
.withArgs(42)
.onThirdCall()
.resolves('apple pie')
.rejects('no more pie')
ãããäœãããŸããïŒ
stub
ã«åŒãç¶ã責任ãè¿œå ãã代ããã«ãç¯å²ãã¯ããã«çãsinon
ã«æ°ããã¡ã³ããŒã玹ä»ããããšãææ¡ããŸãã
ç§ãèããããšãã§ããæãéèŠãªã®ã¯ãé¢æ°ã®äžå€ã®ä»£çšã§ãã
ãã®åŸãããããã£ã«ã€ããŠäœãããããåŸã§ç解ã§ããŸãïŒåå¥ã®æ°ããåäžè²¬ä»»ã¡ã³ããŒãšããŠïŒã
sinon.fake
fake
ïŒ sinon.fake
ãåŒã³åºãããšã®æ»ãå€ïŒã¯ãçŽç²ã§äžå€ã®Function
ã§ãã ããã¯äžã€ã®ããšããããŠäžã€ã®ããšã ããããŸãã ãã¹ãŠã®åŒã³åºãã§åãåäœãããŸãã stub
ãšã¯ç°ãªãããã®åäœã¯åå®çŸ©ã§ããŸããã å¥ã®åäœãå¿
èŠãªå Žåã¯ãæ°ããfake
ãäœæããŸãã
åœç©ã¯ãããã®è²¬ä»»ã®1ã€ãæã€ããšãã§ããŸã
Promise
ãå€ã«è§£æ±ºããŸãPromise
ãError
ã«æåŠããŸãError
ãæããå¯äœçšãå¿
èŠ/å¿
èŠã§ãããããã§ãã¹ãã€ã€ã³ã¿ãŒãã§ã€ã¹ãå¿
èŠãªå Žåã¯ãå®éã®é¢æ°ã䜿çšãããã stub
ã䜿çšããããã«ã¹ã¿ã é¢æ°ãäœæããŸã
sinon.replace(myObject, myMethod, sandbox.spy(function(args) {
someFunctionWithSideEffects(args);
});
ãŠãŒã¶ãŒããµããŒããããŠããªãæ¹æ³ã§ãšã©ãŒãäœæ/䜿çšããããšãããšããšã©ãŒãã¹ããŒããããšã«å¯å€§ã«ãªããŸãã
// will throw TypeError when `config` argument has more than one property
const fake = sinon.fake({
resolves: true,
returns: true
});
.withArgs
ãé€ããŠãããã¯äžå€æ§ã«éåããŸã
// will return a Promise that resolves to 'apple pie'
var fake = sinon.fake({resolves: 'apple pie'})
// will return a Promise that rejects with the provided Error, or
// creates a generic Error using the input as message
var fake = sinon.fake({rejects: new TypeError('no more pie')});
var fake = sinon.fake({rejects: 'no more pie'});
// returns the value passed
var fake = sinon.fake({returns: 'apple pie'});
// throws the provided Error, or creates a generic Error using the
// input as message
var fake = sinon.fake({throws: new RangeError('no more pie')});
var fake = sinon.fake({throws: 'no more pie'});
// replace a method with a fake
var fake = sinon.replace(myObject, 'methodName', sandbox.fake({
returns: 'apple pie'
}))
// .. or use the helper method, which will use `sandbox.replace` and `
// sinon.fake`
var fake = sinon.setFake(global, 'methodName', {
returns: 'apple pie'
});
// create an async fake
var asyncFake = sinon.asyncFake({
returns: 'apple pie'
});
fake
ãããã§äœ¿çšããã®ã«æé©ãªåè©ãã©ããã¯ããããŸãããã圢容è©ãåè©ã«è¿·ããªãããã«ãåè©ã®äœ¿çšèŠåã«åºå·ããå¿
èŠããããšæããŸãã
ããã¯ç§ããã°ããèããŠãããã®ã§ãããããã©ã«ãã®ãµã³ãããã¯ã¹ãäœæããŠã¿ãŸãããïŒ åå¥ã®ãµã³ãããã¯ã¹ãå¿ èŠãªå Žåã§ããäœæã§ããŸãã
sinon.*
ãä»ããŠå
¬éããããã¹ãŠã®ã¡ãœããã«äœ¿çšãããããã©ã«ãã®ãµã³ãããã¯ã¹ãäœæããå¿
èŠããããŸãã
ããã¯ã sinon.stub
ãsandbox.stub
ãšåãã«ãªãããšãæå³ããŸããããã«ããã sinon.stub
ã䜿çšããŠããããã£ãã¹ã¿ãã§ãããšããå¶éããªããªããŸãã
sandbox.replace
sandbox.replace
ãäœæãããããã©ãã§ãäœãã眮ãæãããã¹ãŠã®æäœã«äœ¿çšããŸãã ãããsinon.replace
ãšããŠå
¬éãããã®æ¹æ³ã§äœ¿çšããå Žåã¯ããã©ã«ãã®ãµã³ãããã¯ã¹ã䜿çšããŸãã
ããã«ã¯ããããæ·±å»ãªå ¥åæ€èšŒãå¿ èŠãªã®ã§ãé¢æ°ãé¢æ°ã«ãã¢ã¯ã»ãµãŒãã¢ã¯ã»ãµãŒã«çœ®ãæããã ãã§ãã
@ sinonjs / coreã«pingãå®è¡ããŸã
è¯ãææ¡ãã¢ãŒã¬ã³ã ãããæã£ãŠããŠãããŠããããšãã ãŸãã stub
APIã¯æ··ä¹±ããŠãããšæããŸããããã¹ãŠã®ææ¡ãæ°ã«å
¥ã£ãŠããŸãã ããã«ããã€ãã®èãããããŸãïŒ
sinon.fake
ããã§äžå€æ§ãéèŠã§ããããšã«åæããŸãã ãã ããã¹ã¿ãã§çŸåšå¯èœãªããã€ãã®ãæ£åžžãªããŠãŒã¹ã±ãŒã¹ãèš±å¯ããããšãã§ããŸãã
ããšãã°ã次ã®ãã®ãçæããŠè¿ãããã®æå¹ãªãŠãŒã¹ã±ãŒã¹ã§ããå¯èœæ§ããããŸãã
sinon.fake({
yields: [null, 42],
returns: true
})
äœãçã«ããªã£ãŠããŠãäœãçã«ããªã£ãŠããªããã確èªã§ããŸãã
ãŸããæ§æãšããŠcallsThrough: true
ããµããŒãããŠããå ŽåïŒããã¯ãåäœããããã£ã®ãããããšã®çµã¿åããã§ã¯ç¡å¹ã§ãïŒããã¹ãã€ãAPIã®ä»£ããã«æ°ããåœç©ã䜿çšããããšãã§ããŸãã ããã¯ãSinon-speakã§ãã¹ãã€ããšãã¹ã¿ãããäœãæå³ããããåŠã¶ãããèªæã§ãð
ããã©ã«ãã®ãµã³ãããã¯ã¹ã䜿çšãã
ç§ã¯ãã®ã¢ã€ãã¢ã奜ãã§ããããã¹ãã®åŸã«sinon.restore()
ãåŒã³åºããšãä»ã®ãã¹ãã®æ®ãã®éšåãå
ã«æ»ããé©ãã¹ãçµæãåŸãããå¯èœæ§ããããŸãã ããã«ããå¯èœã«ãªãçŽ æŽãããããšã¯ãã°ããŒãã«ãµã³ãããã¯ã¹ãbeforeEach
ã«ãªã»ããããŠããã¹ãã®åé¢ãæ¹åããããšã§ãã ð
sandbox.replace
ç§ã¯ããããšãŠã奜ãã§ãã ç§ã¯ãããããã®ããšãããã«è²Œãä»ããããŠãã ããããšãããŠãŒãã£ãªãã£ãšããŠç解ããŠããŸãããïŒ
ãŸããcallsThroughïŒtrueãæ§æãšããŠãµããŒãããŠããå ŽåïŒããã¯ãåäœããããã£ã®ãããããšã®çµã¿åããã§ã¯ç¡å¹ã§ãïŒããã¹ãã€ãAPIã®ä»£ããã«æ°ããåœç©ã䜿çšããããšãã§ããŸãã ããã¯ãSinon-speakã§ãã¹ãã€ããšãã¹ã¿ãããäœãæå³ããããåŠã¶ãããèªæã§ãð
ããã¯ã spy
ãŸãã¯stub
ããŸã£ããå¿
èŠãªãããšãæå³ããŸããïŒ
sandbox.replace
ç§ã¯ããããšãŠã奜ãã§ãã ç§ã¯ãããããã®ããšãããã«è²Œãä»ããããŠãã ããããšãããŠãŒãã£ãªãã£ãšããŠç解ããŠããŸãããïŒ
ãããããã¯ã¢ã€ãã¢ã§ããã åãã¡ãœããïŒ sinon.stub
ïŒããªãŒããŒããŒãããŠå€ãã®ããšãè¡ã代ããã«ã1ã€ã®ããšã ããè¡ãæ瀺çãªã¡ãœããã䜿çšããŸã
匷調ããããã«ã fake
APIã¯ãã¹ãã€ãšã¹ã¿ãã§çŸåšå¯èœãªãã¹ãŠããµããŒãããããã§ã¯ãªãã§ãããã ããããããã fake
APIã¯ã stub
ãšspy
ã®æ©èœãçµ±åããæ©äŒã ãšæããŸãã
ç§ã¯ãã®ã¢ã€ãã¢ã奜ãã§ããããã¹ãã®åŸã«sinon.restoreïŒïŒãåŒã³åºããšãä»ã®ãã¹ãã®æ®ãã®éšåãå ã«æ»ããé©ãã¹ãçµæãåŸãããå¯èœæ§ããããŸãã ããã«ããå¯èœã«ãªãçŽ æŽãããããšã¯ãbeforeEachã®ã°ããŒãã«ãµã³ãããã¯ã¹ããªã»ããããŠããã¹ãã®åé¢ãæ¹åããããšã§ãã ð
ããã¯ç¢ºãã«é倧ãªå€æŽã§ããã軜ãå°å ¥ããã¹ãã§ã¯ãããŸããã
fake
ãäœæãããšãã«ãåäœæ§æãæž¡ããªãå Žåã¯ã spy
ãšåçã«ãªããŸãã
// ~spy, records all calls, has no behaviour
const fake = sinon.fake();
// ~stub, records all calls, returns 'apple pie'
const fake = sinon.fake({
returns: 'apple pie'
});
ããã§ã¯äœãããªãã¹ã¿ããã©ã®ããã«äœæããŸããïŒ
ããã§ã¯äœãããªãã¹ã¿ããã©ã®ããã«äœæããŸããïŒ
ç§ã¯ããªãã®è³ªåãå®å šã«ç解ããŠãããã©ããããããŸãã...ãããããã«è¡ããŸã
// a fake that has no behaviour
const fake = sinon.fake();
// put it in place of an existing method
sandbox.replace(myObject, 'someMethod', fake);
ãããç§ã¯ããªããä»äœãæå³ããŠããã®ãç解ããŠãããšæããŸãïŒ fake
ã¯åžžã«stub
ã§ãã ~spy, records all calls
ãšèšã£ããšããç§ã¯ãå
ã®é¢æ°ãžã®åŒã³åºãããç解ããŸããã ãã ãã fake
ã«ã¯ã眮ãæããããé¢æ°ã«ã€ããŠã®ç¥èããããŸããããããsandbox.replace
ã®æ©èœã§ãã
ããã念é ã«çœ®ããŠãçŸåšã®spy
æ©èœãïŒã³ãŒã«ã¹ã«ãŒã®ããã«ïŒæ°ããåœç©ã«æããããæ¹æ³ã«ã€ããŠãå¥ã®ææ¡ã瀺ããŸãã
const fake = sinon.fake(function () {
// Any custom function
});
äžããããé¢æ°ã¯åœç©ã«ãã£ãŠåŒã³åºãããŸãã ãã®APIã䜿çšãããšãä»ã®åäœãšæ··åšãããããšãã§ããªããªããŸãã å®éãconfigãªããžã§ã¯ãã¯ãæå®ãããåäœãå®è£ ããé¢æ°ãäœæãããããåœç©ã«æž¡ããŸãã
sandbox.spy(object, method)
ã®å®è£
ã¯ã次ã®ããã«ãªããŸãã
const original = object[method];
const fake = sinon.fake(original);
sandbox.replace(object, method, fake);
åºæ¬çã«ã¯ã³ã©ã€ããŒð€
ããã ç©äºãåçŽåãããã楜ãã¿ã®ããã«ãªããã·ã³ã°ãéå§ã§ããŸãðãšå©çð°
ãã ãã fake
ã䜿çšããã ãã§ã spy
ãšstub
ã䜿çšããªãããã«ããå Žåã¯ãããã2ã€ããã®ãŸãŸã«ããŠããå¿
èŠããããŸãã
ããã§ã次ã®ãAPIã«ã€ããŠèããŠããŸãã ã©ããã«çœ®æããžãã¯ãé
眮ããã«ã¯ã sandbox.spy
ãå¿
èŠã«ãªããŸãã ç§ãç解ããŠããããã«ãããã¯äžäœäºææ§ãããã¯ãã§ãã ãã®åŸã stub
ã®å®è£
ã¯éæšå¥šã«ãªãå¯èœæ§ããããŸãã
眮æããžãã¯ãã©ããã«çœ®ãã«ã¯ãsandbox.spyãå¿ èŠã«ãªããŸãã ç§ãç解ããŠããããã«ãããã¯äžäœäºææ§ãããã¯ãã§ãã ãã®åŸãã¹ã¿ãã®å®è£ ã¯éæšå¥šã«ãªãå¯èœæ§ããããŸãã
ãã©ããŒãããã©ããããããŸããã 詳现ãæããŠããã ããŸããïŒ
ãã¡ããã ç§ã¯ããªãã®ææ¡ãç解ããŠããã®ã§ãããªãã¯é床ã«è€éãªstub
APIã®ä»£ãããæãã§ããŸãã ã¹ã¿ããçŸåšå®è£
ãããŠããæ¹æ³ã¯ãåäœãå®è£
ããé¢æ°ã䜿çšããŠspy
ãäœæããããšã§ãã ç§ãææ¡ããŠããã®ã¯ã fake
APIã§åãããšãè¡ããå
éšã§spy
ãäœæããããšã§ãããé£éããªããããã®ã§ãåäœãè¿ãããšã¯ãããããŸããã ã ã¹ãã€ãè¿ãã ãã§ãã ããã«ããã fake
ã®å®è£
ãstub
ã®ä»£ããã«ãªããè¿ãããé¢æ°ã¯çŸåšã®ãã¹ãŠã®SinonAPIãšäºææ§ããããŸãã ããã¯çã«ããªã£ãŠããŸããããããšãç§ã¯äœãã足ããŸãããïŒ
OKãç§ãã¡ã¯åããããªç解ãæã£ãŠãããšæããŸãð
ç¹°ãè¿ãã«ãªããŸãããäœããèŠéããå Žåã«åããŠãä»ã®å¯çš¿è ãåãããã«ç解ã§ããããã«ããŸãã
sandbox.replace
ïŒããã¯çŸåšstub
ãããŸãïŒsinon
ã«ã¯ããã©ã«ãã®ãµã³ãããã¯ã¹ãããã sinon.reset
ãšsinon.restore
ã䜿çšã§ããŸãïŒããããããŒãžããã ãã§ããã§ããïŒïŒsinon.fake
âãã¹ãŠã®åŒã³åºããèšé²ããé¢æ°ã®äžå€ã§ããã°ã©ã å¯èœãªçœ®æsinon.spy
sinon.stub
// effectively a spy that has no target
const fake = sinon.fake()
// spy on a function
const fake = sinon.fake(console.log);
const fake = sinon.fake(function() { return 'apple pie'; });
// a shorthand construction of fake with behaviour
const fake = sinon.fake({
returns: 'apple pie'
});
// replacing an existing function with a fake
var fakeLog = sinon.fake();
sandbox.replace(console, 'log', fakeLog);
ãã®ç¶æ
ã§ã¯ãææ¡ã¯Function
ã®ã¿ãæ±ããŸãã éé¢æ°ããããã£ãšã¢ã¯ã»ãµãŒã«ã€ããŠã©ãããããæ€èšããå¿
èŠããããŸãã å°ãªããšãã sandbox.replace
ãå¶éããŠãæ£åžžãªäº€æã®ã¿ãèš±å¯ã§ãããã©ããã確èªããå¿
èŠããããŸãã
ããã¯ã sinon.stub()
ãšsinon.spy()
ã®äž¡æ¹ãå°æ¥å»æ¢ããã sinon.fake()
ãåªå
ãããããŸãã¯åã«å
éšã§ããçŽãããããšãæå³ããŸããïŒ ãããããªããç§ãã¡ã¯æ¬è³ªçã«TestDoubleã®èãæ¹ã«åãã£ãŠããŸãã IMHOãå¿
ãããæªãããšã§ã¯ãããŸããããå€ãã®äººãSinon apiåŒã³åºãããã¹ãŠsinon.fake()
ã§çœ®ãæããå¿
èŠãããããšã«æ°ä»ããå Žåã¯ãå¥ã®ã©ã€ãã©ãªã䜿çšããããšãã§ããŸãïŒãã ãã€ãŸããSinonã®APIã«é¢ããæ¢åã®ç¥èããã¹ãŠå€±ãããããšã«ãªããŸãïŒã
ããã¯ãsinon.stubïŒïŒãšsinon.spyïŒïŒã®äž¡æ¹ãå°æ¥å»æ¢ãããsinon.fakeïŒïŒãåªå ãããããšãæå³ããŸããããããšãå éšã§ããçŽãããã ãã§ããïŒ ãããããªããç§ãã¡ã¯æ¬è³ªçã«TestDoubleã®èãæ¹ã«åãã£ãŠããŸãã
å€å°éãªã£ãŠãããšæããŸãã ãã®ææ¡ã®ç§ã®äž»ãªåæ©ã¯ãäžå€ã®æ¯ãèããããåœã®æ©èœãæã€ããšã§ãã
IMHOãå¿ ãããæªãããšã§ã¯ãããŸããããå€ãã®äººããsinon.fakeïŒïŒã®ãã¹ãŠã®Sinon apiåŒã³åºãã眮ãæããå¿ èŠãããããšã«æ°ä»ããå Žåã¯ãå¥ã®ã©ã€ãã©ãªã䜿çšããããšãã§ããŸãïŒãã ãã Sinonã®APIã«é¢ããæ¢åã®ç¥èããã¹ãŠå€±ãããšãæå³ããŸãïŒã
人ã ãå¥ã®å³æžé€šã圌ãã®ããŒãºãããããæºãããšæããªããç§ãã¡ã¯åœŒãããããåŠã¶ã®ãæäŒã£ãããšãå¬ããæããŸã:)
ããããã¹ãã€ã¡ãœãããšã¹ã¿ãã¡ãœãããç¶æããã®ã§ããããããããšãéæšå¥šã«ããã®ã§ãããããæ©èœãäœäžããå¯èœæ§ããããŸãã ããã¯ç§ã«ã¯ããããŸããã§ããã
ããããã¹ãã€ã¡ãœãããšã¹ã¿ãã¡ãœãããç¶æããã®ã§ããããããããšãéæšå¥šã«ããã®ã§ãããããæ©èœãäœäžããå¯èœæ§ããããŸãã
fake
ãå®å®ããŠããããã«èŠãããã spy
ãšstub
ãå»æ¢ãã1幎ã®ããã«äººã
ãã¢ããã°ã¬ãŒãã§ããããã«ããŸãã
人ã ãã³ãŒãã移åã§ããããã«ãã³ãŒãã¢ãããšåªããããã¥ã¡ã³ããæäŸããããã«æåãå°œããã¹ãã ãšæããŸã
ç§ã¯ããã®æåã®éšåïŒããã©ã«ãã®ãµã³ãããã¯ã¹ïŒã®ãã©ã³ãã«åãçµãã§ããŸãã sandbox
ãšcollection
ã1ã€ã«ãªãããã«ãã³ãŒãããªãã¡ã¯ã¿ãªã³ã°ããŸããã ããã©ã«ãã®ãµã³ãããã¯ã¹ãæ©èœããããã«ãªããŸããã
ä»åŸæ°æ¥éã§ã³ããããæŽçããŠããããã®ãªããžããªã«æŽæ°ãããAPIã®ãã©ã³ããäœæããŸãã
ããã¯çŽ æŽãããã¢ã€ãã¢ã§ãããéåžžã«ããæžãããŠããŸãã
ãŸããã¹ã¿ããšã¹ãã€ã«éæšå¥šã®éç¥ãè¿œå ããŸãã
ãŸããé¢æ°ãæž¡ãããšã§ãããŒã䜿çšããŠãªããžã§ã¯ããæž¡ãããšãå€æŽããããšãèããŠããŸããã
ããã«ããã次ã®å©ç¹ãè¿œå ãããŸãã
typescript
ãŸãã¯ä»ã®çš®é¡ã®éçãã§ãã«ãŒã䜿çšããããŠãŒã¶ãŒã®é¢æ°ã«type
ãè¿œå ã§ããŸãããããã£ãŠãAPIã¯ä»£ããã«æ¬¡ã®ããã«ãªããŸãã
// It would be cool to allow users to import these using destructuring to make code more concise
import { resolves, rejects, returns } from 'sinon/behaviors';
var fake = sinon.fake(resolves('apple pie'))
var fake = sinon.fake(rejects(new TypeError('no more pie')));
var fake = sinon.fake(rejects('no more pie'));
var fake = sinon.fake(returns('apple pie'));
var fake = sinon.fake(throws(new RangeError('no more pie'));
var fake = sinon.fake(throws('no more pie'));
ãããå®è£ ããããšã«ãªããšãææ¡ããŠãããããªéåžžã«åçŽãªãªããžã§ã¯ããè¿ãã ãã®åé¡ã«ãªãå¯èœæ§ããããŸãã 次ã«ãè€æ°ã®åäœãããå Žåã¯ãããããããŒãžããã ãã§ãã
ãŸãã onThirdCall
ãšwithArgs
ã®ãããªãã®ãæ··åããããšã«ãªããšããããã®å Žåã«äœãèµ·ããããææžåããå¿
èŠããããšæããŸãã
ãããé ãã¬ãã¥ãŒããŠãã¿ãŸããã ããæ°ã¶æã¯ãšãŠãå¿ããã£ãã§ãã
@lucasfcostaã¯PRïŒ1586ããã§ãã¯ããŠãã ãã
ãã®åé¡ã¯ãæè¿ã®ã¢ã¯ãã£ããã£ããªããããèªåçã«å€ããã®ãšããŠããŒã¯ãããŠããŸãã ãã以äžã®ã¢ã¯ãã£ããã£ãçºçããªãå Žåã¯éããããŸãã è²¢ç®ããŠããã ãããããšãããããŸãã
5.0.0ã®åã®ããŒãžã§ã³ã¯ãpackage.jsonã®æ°ãã5.0.0-nextã*ãã¬ãªãªãŒã¹ããŒãžã§ã³ã§åé¡ãåŒãèµ·ãããŠããŸããããã¯ã5.0.0ãã©ã®ãã¬ãªãªãŒã¹ããŒãžã§ã³ããã倧ããããã§ãã
5.0.0ãåºãŠããã®ã§ã next
ã®ãã¬ãªãªãŒã¹çªå·ããããã5.0.1-next.1
ã«äžããå¿
èŠããããšæããŸããïŒ
ç§ã䜿çšããŠããå¥ã®ããã±ãŒãžãéæšå¥šã®ã¡ãã»ãŒãžãååŸããŠããŠããã®package.jsonã"sinon": "^5.0.0-next.4"
ã«äŸåããŠãããããããã«æ°ã¥ããŸãã
npm WARN deprecated [email protected]: this version has been deprecated
ããããã¬ãªãªãŒã¹ã®åé¡ã«ã€ããŠæ°ããåé¡ãéã䟡å€ããããã©ããã¯ããããŸããã§ããããã®ãããããã§ã®ã³ã¡ã³ããæãå®å šã§ããããã«æãããŸããã
å¥ã®è§£æ±ºçã¯ã次ã®ã¡ãžã£ãŒããŒãžã§ã³ããªãªãŒã¹ããããšã§ãã @ sinonjs / coreã«ã€ããŠã©ãæããŸããïŒ
@ mroderickv5ã®ãã¹ãŠã®å€æŽãäœã§ãããã¯ããããããŸããã ç§ã®æåŸã®ãã¹ãããããã¯ããŸããããŸããããããŠç§ã¯æ°ããåœç©ã䜿ãã®ã楜ãã¿ã«ããŠããŸãã ããã¯æ°ããã¡ãžã£ãŒãªã®ã§ãã¡ãã£ãšããããåºè·ããŠãã ããð
次ã®ã¡ãžã£ãŒããŒãžã§ã³ããªãªãŒã¹ããåã«ãããŒãžãããPRïŒ1764ããã1ã€ãããŸãã
ç§ã¯[email protected]
ãå
¬ââéããŸãããããããåœé¢ã®äººã
ã®ç掻ã楜ã«ããŠãããããšãé¡ã£ãŠããŸãã
ãããã§ãpackage.jsonã§äŸåé¢ä¿ããã¹ãããŸããïŒåžžã«å確èªããã®ãè¯ãã§ãïŒãäžèŽãããã®ãèŠã€ãããªãïŒãªãªãŒã¹ããŸã ãªãïŒããã "sinon": "^5.0.1"
ã¯ãšã©ãŒã衚瀺ãã "sinon": "^5.0.1-next.1"
ãã®ããŒãžã§ã³ãååŸãããšæ£ããåäœããŸãã
ããã¯æ±ºããŠå€§ããããšã§ã¯ãããŸããã§ãããç¹ã«v5ããã°ããéçºäžã§ãã£ãããšãç¥ã£ããšãã¯ãç¥ã£ãŠãã䟡å€ããããšæããŸããããªãªãŒã¹ããããŸã§ã®æéã¯ããããŸããã§ããã è¿ãå°æ¥ã«ãªãªãŒã¹ããã®ã¯è¯ãèãã®ããã«æããŸãã
fake
ã¯ïŒ1768ã§å°å
¥ããã [email protected]
ã«ãªããŸãã
æãåèã«ãªãã³ã¡ã³ã
OKãç§ãã¡ã¯åããããªç解ãæã£ãŠãããšæããŸãð
ç¹°ãè¿ãã«ãªããŸãããäœããèŠéããå Žåã«åããŠãä»ã®å¯çš¿è ãåãããã«ç解ã§ããããã«ããŸãã
TL; DR
sandbox.replace
ïŒããã¯çŸåšstub
ãããŸãïŒsinon
ã«ã¯ããã©ã«ãã®ãµã³ãããã¯ã¹ããããsinon.reset
ãšsinon.restore
ã䜿çšã§ããŸãïŒããããããŒãžããã ãã§ããã§ããïŒïŒsinon.fake
âãã¹ãŠã®åŒã³åºããèšé²ããé¢æ°ã®äžå€ã§ããã°ã©ã å¯èœãªçœ®æsinon.spy
sinon.stub
ãã®ç¶æ ã§ã¯ãææ¡ã¯
Function
ã®ã¿ãæ±ããŸãã éé¢æ°ããããã£ãšã¢ã¯ã»ãµãŒã«ã€ããŠã©ãããããæ€èšããå¿ èŠããããŸãã å°ãªããšããsandbox.replace
ãå¶éããŠãæ£åžžãªäº€æã®ã¿ãèš±å¯ã§ãããã©ããã確èªããå¿ èŠããããŸãã