Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
importをモックする話
Sota Sugiura
June 20, 2016
Programming
0
1.9k
importをモックする話
Meguro.es #4 で発表しました。
Sota Sugiura
June 20, 2016
Tweet
Share
More Decks by Sota Sugiura
See All by Sota Sugiura
sota1235
10
2.9k
sota1235
9
180
sota1235
7
3.1k
sota1235
4
1.2k
sota1235
6
8.9k
sota1235
1
740
sota1235
3
3.5k
sota1235
0
270
sota1235
13
6.3k
Other Decks in Programming
See All in Programming
masayaaoyama
4
850
ufoo68
1
180
mraible
PRO
0
280
line_developers_tw
0
560
chichou
1
860
makicamel
1
180
maito1201
0
280
malvinstn
1
660
danilop
0
160
azdaroth
0
100
standfm
1
290
thatjeffsmith
0
470
Featured
See All Featured
pauljervisheath
196
15k
hatefulcrawdad
257
17k
malarkey
192
8.6k
addyosmani
310
21k
imathis
478
150k
shlominoach
176
7.4k
sachag
267
17k
sstephenson
144
12k
nonsquared
81
3.3k
skipperchong
7
670
gr2m
83
11k
sugarenia
233
840k
Transcript
JNQPSUΛϞοΫ͢Δ .FHVSPFT!8BOUFEMZ !TPUB
XIPBNJ w 4PUB4VHJVSB !TPUB w ͪΌΜͱ+4͘Β͍ w ෆಈલࡏॅ w
͍͍ͩͨࠇ w גࣜձࣾΞΠελΠϧ
ςετͷ
͜ΜͳϞδϡʔϧ // checker.js // ࠇ۠ຽҰཡΛimport import people from 'people'; /**
* @description ࠇ۠ຽ͔Ͳ͏͔νΣοΫ͢Δ * @param {String} name * @return {Boolean} */ export default function isMeguroJser(name) { return (people.indexOf(name) > 0); }
ςετํ๏Λߟ͑ͯΈΔ
ৼΔ͍Λߟ͑Δ w ඇࠃຽඇࠇ۠ຽΛͨ͠ΒGBMTFΛฦ͢ w ࠃຽࠇ۠ຽΛͨ͠ΒUSVFΛฦ͢ w ؆୯͡ΌΜ
վΊͯ // checker.js // ࠇ۠ຽҰཡΛimport import people from 'people'; /**
* @description ࠇ۠ຽ͔Ͳ͏͔νΣοΫ͢Δ * @param {String} name * @return {Boolean} */ export default function isMeguroJser(name) { return (people.indexOf(name) > 0); }
վΊͯ // checker.js // ࠇ۠ຽҰཡΛimport import people from 'people'; /**
* @description ࠇ۠ຽ͔Ͳ͏͔νΣοΫ͢Δ * @param {String} name * @return {Boolean} */ export default function isMeguroJser(name) { return (people.indexOf(name) > 0); } QFPQMFྻʹ ໊લ͕͋Δ͔ݟͯΔ
վΊͯ // checker.js // ࠇ۠ຽҰཡΛimport import people from 'people'; /**
* @description ࠇ۠ຽ͔Ͳ͏͔νΣοΫ͢Δ * @param {String} name * @return {Boolean} */ export default function isMeguroJser(name) { return (people.indexOf(name) > 0); } QFPQMFྻʹ ໊લ͕͋Δ͔ݟͯΔ ͜͜ͰQFPQMFΛ JNQPSUͯ͠Δ
QFPQMFKT // people.js /** @type {Array} ࠇ۠ຽͷօ༷ */ export default
[ 'sota1235', 'sota1236', 'sota1237', ]
QFPQMFKT // people.js /** @type {Array} ࠇ۠ຽͷօ༷ */ export default
[ 'sota1235', 'sota1236', 'sota1237', ] bTPUB`͕USVF bTPUB`͕GBMTFͳΒΑͦ͞͏
// test.js import assert from 'assert'; import checker from './checker';
describe('Test for checker.js', () => { it(‘sota1235ࠃຽ :)', done => { assert(checker('sota1235')); done(); }); it(‘sota1238ඇࠃຽ :(', done => { assert(!checker('sota1238')); done(); }); });
ςετॻ͚ͨʂ w ͜ΕͰࠇ+4FSͷબผᘳ w อकͰ͖Δ࣭ͷߴ͍ςετ͕ॻ͚ͨ w JNQPSUΛϞοΫ͢ΔඞཁͳΜͯͳ͔ͬͨΜ
ͱ͍͔ͳ͍ w ͜ͷςετʹવͳ͕Β͕݀͋Δ w ҎԼͷέʔεʹରԠͰ͖ͳ͍ w TPUB͕ࠇ۠֎Ҡॅ͢Δ w TPUB͕ࠇ۠Ҡॅ͢Δ
UFTUKT // test.js import assert from 'assert'; import checker from
'./checker'; describe('Test for checker.js', () => { it(‘sota1235ࠃຽ :)', done => { assert(checker('sota1235')); done(); }); it(‘sota1238ඇࠃຽ :(', done => { assert(!checker('sota1238')); done(); }); }); TPUB͕ ࠇ۠ʹӬॅ͢Δલఏ
UFTUKT // test.js import assert from 'assert'; import checker from
'./checker'; describe('Test for checker.js', () => { it(‘sota1235ࠃຽ :)', done => { assert(checker('sota1235')); done(); }); it(‘sota1238ඇࠃຽ :(', done => { assert(!checker('sota1238')); done(); }); }); TPUB͕ ࠇ۠ʹӬॅ͢Δલఏ TPUB͕ ࠇ۠ʹདྷͳ͍લఏ
ͭΒ͍ w ςετ͍ͨ͠Ϟδϡʔϧͷॲཧ͕·ͨผͷϞδϡʔ ϧʹґଘ͍ͯ͠Δ w ϢχοτςετͷͨΊʹࠇ۠Ӭॅͱ͍͏ۤߦ
ࠇ۠Ҏ֎Ͱʜ w ҎԼͷ༷ͳॲཧςετ͕ॻ͖ͮΒ͍ w "1*ॲཧ w %#ૢ࡞ w %0.ૢ࡞ w
ؤுͬͯςετ༻࡞͍͍͚ͬͯͲ͊͞ʜ
Ͳ͏͢Δ͔ w ґଘϞδϡʔϧΛελϒʹࠩ͠ସ͑ͨϞοΫΛ ࡞Ζ͏
DIFDLFSKT // checker.js // ࠇ۠ຽҰཡΛimport import people from 'meguro'; /**
* @description ࠇ۠ຽ͔Ͳ͏͔νΣοΫ͢Δ * @param {String} name * @return {Boolean} */ export default function isMeguroJser(name) { return (people.indexOf(name) > 0); } ςετͷ͚࣌ͩ ͜͜Λελϒʹ͢Δ
Ͳ͏ͬͯ Ňŏ﹏ŏ ʁ
͓·ͨͤ
QSPYZRVJSFKT w ຊͷຊ w ҰݴͰݴ͏ͱʮJNQPSUΛϞοΫ͢ΔʯͨΊͷ OQNϥΠϒϥϦ w ͍ํ͕ඇৗʹγϯϓϧ
QSPYZRVJSFKT w ෦࣮JNQPSUͷϥούʔ w JNQPSU͢ΔϞδϡʔϧ͕ͨ͠ελϒΛJNQPSU ͢ΔΑ͏ʹࡉ͢Δ
ී௨ͷJNQPSU JNQPSU JNQPSU
QSPYZRVJSFKT JNQPSU JNQPSU ҙͷϞδϡʔϧΛ ελϒʹͰ͖Δ
ͬͯΈΑ͏ʂ
QFPQMFKTΛελϒʹ͢Δ UFTUKT DIFDLFSKT ελϒ QFPQMFKT JNQPSUQFPQMFGSPNbQFPQMF` Ͱελϒ͕ฦΔ༻ʹ͢Δ
DIFDLFSKTΛϞοΫ import proxyquire from 'proxyquire'; const stubs = { people:
[ 'sota4567', 'sota4568', ], }; const mockChecker = proxyquire('./checker', stubs);
DIFDLFSKTΛϞοΫ import proxyquire from 'proxyquire'; const stubs = { people:
[ 'sota4567', 'sota4568', ], }; const mockChecker = proxyquire('./checker', stubs); ୈҰҾʹελϒΛೖ͢ΔϞδϡʔϧ NPDL$IFDLFSʹೖΔͷ͜ͷϞδϡʔϧ
DIFDLFSKTΛϞοΫ import proxyquire from 'proxyquire'; const stubs = { people:
[ 'sota4567', 'sota4568', ], }; const mockChecker = proxyquire('./checker', stubs); ୈೋҾʹελϒ
DIFDLFSKTΛϞοΫ import proxyquire from 'proxyquire'; const stubs = { people:
[ 'sota4567', 'sota4568', ], }; const mockChecker = proxyquire('./checker', stubs); ୈೋҾʹελϒ ελϒ͍ͨ͠ϞδϡʔϧΛ LFZWBMVFܗࣜͰ͢
मਖ਼൛UFTUKT // test.js import assert from 'assert'; import proxyquire from
'proxyquire'; describe('Test for checker.js', () => { it(‘sota1235ࠃຽ :)', done => { const checkerMock = proxyquire('./checker', { people: ['sota1235'], }); assert(checkerMock('sota1235')); done(); }); it('sota1238ඇࠃຽ :(', done => { const checkerMock = proxyquire('./checker', { people: [], }); assert(!checker('sota1238')); done(); }); });
TPUBࠃຽ // test.js import assert from 'assert'; import proxyquire from
'proxyquire'; describe('Test for checker.js', () => { it('sota1235ࠃຽ :)', done => { const checkerMock = proxyquire('./checker', { people: ['sota1235'], }); assert(checkerMock('sota1235')); done(); }); }); QFPQMFϞδϡʔϧΛελϒ bTPUB`ؚ͕·ΕΔ
TPUBඇࠃຽ // test.js import assert from 'assert'; import proxyquire from
'proxyquire'; describe('Test for checker.js', () => { it('sota1238ඇࠃຽ :(', done => { const checkerMock = proxyquire('./checker', { people: [], }); assert(!checker('sota1238')); done(); }); }); QFPQMFϞδϡʔϧΛελϒ ۠ຽ͕୭͍ͳ͍͜ͱʹ
.JTTJPO$PNQMFUF w JNQPSUΛελϒʹͰ͖ͨʂ
ॴײ w ෦࣮ݟ͚ͨͲ͖ͪΜͱ࡞ͬͯ͋Δ͠ΨϯΨ ϯ͍͍͑ͱࢥ͏ w ֶशίετΊͪΌͪ͘Ό͍ w ҰԠ͍Ζ͍ΖΦϓγϣϯ͋Δ͚Ͳݸਓతʹ ඪ४ػೳͰॆ w
ΈΜͳ͓͏
ͪͳΈʹ w ࣅͨͷͰSFXJSFKTͱ͍͏ͷ͋Δ w QSPYZRVJSFઌʹελϒೖ͢Δ͚ͲSFXJSF TFUUFS HFUUFS͕͋Δ w Ͳ͕͍͍ͬͪͱ͔ݸਓతʹͳ͍ͷͰ͓ΈͰ Ͳ͏ͧ
Ҏ্ʂ