Slide 1

Slide 1 text

JNQPSUΛϞοΫ͢Δ࿩ .FHVSPFT!8BOUFEMZ !TPUB

Slide 2

Slide 2 text

XIPBNJ w 4PUB4VHJVSB !TPUB w ͪΌΜͱ+4೥໨͘Β͍ w ෆಈલࡏॅ w ͍͍ͩͨ໨ࠇ w גࣜձࣾΞΠελΠϧ

Slide 3

Slide 3 text

ςετͷ࿩

Slide 4

Slide 4 text

͜ΜͳϞδϡʔϧ // checker.js // ໨ࠇ۠ຽҰཡΛimport import people from 'people'; /** * @description ໨ࠇ۠ຽ͔Ͳ͏͔νΣοΫ͢Δ * @param {String} name * @return {Boolean} */ export default function isMeguroJser(name) { return (people.indexOf(name) > 0); }

Slide 5

Slide 5 text

ςετํ๏Λߟ͑ͯΈΔ

Slide 6

Slide 6 text

ৼΔ෣͍Λߟ͑Δ w ඇࠃຽඇ໨ࠇ۠ຽΛ౉ͨ͠ΒGBMTFΛฦ͢ w ࠃຽ໨ࠇ۠ຽΛ౉ͨ͠ΒUSVFΛฦ͢ w ؆୯͡ΌΜ

Slide 7

Slide 7 text

վΊͯ // checker.js // ໨ࠇ۠ຽҰཡΛimport import people from 'people'; /** * @description ໨ࠇ۠ຽ͔Ͳ͏͔νΣοΫ͢Δ * @param {String} name * @return {Boolean} */ export default function isMeguroJser(name) { return (people.indexOf(name) > 0); }

Slide 8

Slide 8 text

վΊͯ // checker.js // ໨ࠇ۠ຽҰཡΛimport import people from 'people'; /** * @description ໨ࠇ۠ຽ͔Ͳ͏͔νΣοΫ͢Δ * @param {String} name * @return {Boolean} */ export default function isMeguroJser(name) { return (people.indexOf(name) > 0); } QFPQMF഑ྻʹ ໊લ͕͋Δ͔ݟͯΔ

Slide 9

Slide 9 text

վΊͯ // 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ͯ͠Δ

Slide 10

Slide 10 text

QFPQMFKT // people.js /** @type {Array} ໨ࠇ۠ຽͷօ༷ */ export default [ 'sota1235', 'sota1236', 'sota1237', ]

Slide 11

Slide 11 text

QFPQMFKT // people.js /** @type {Array} ໨ࠇ۠ຽͷօ༷ */ export default [ 'sota1235', 'sota1236', 'sota1237', ] bTPUB`͕USVF bTPUB`͕GBMTFͳΒΑͦ͞͏

Slide 12

Slide 12 text

// 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(); }); });

Slide 13

Slide 13 text

ςετॻ͚ͨʂ w ͜ΕͰ໨ࠇ+4FSͷબผ͸׬ᘳ w อकͰ͖Δ඼࣭ͷߴ͍ςετ͕ॻ͚ͨ w JNQPSUΛϞοΫ͢ΔඞཁͳΜͯͳ͔ͬͨΜ΍

Slide 14

Slide 14 text

׬

Slide 15

Slide 15 text

ͱ͸͍͔ͳ͍ w ͜ͷςετʹ͸౰વͳ͕Β͕݀͋Δ w ҎԼͷέʔεʹରԠͰ͖ͳ͍ w TPUB͕໨ࠇ۠֎΁Ҡॅ͢Δ w TPUB͕໨ࠇ۠಺΁Ҡॅ͢Δ

Slide 16

Slide 16 text

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͕ ໨ࠇ۠ʹӬॅ͢Δલఏ

Slide 17

Slide 17 text

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͕ ໨ࠇ۠ʹདྷͳ͍લఏ

Slide 18

Slide 18 text

ͭΒ͍ w ςετ͍ͨ͠Ϟδϡʔϧͷॲཧ͕·ͨผͷϞδϡʔ ϧʹґଘ͍ͯ͠Δ w ϢχοτςετͷͨΊʹ໨ࠇ۠Ӭॅͱ͍͏ۤߦ

Slide 19

Slide 19 text

໨ࠇ۠Ҏ֎Ͱ΋ʜ w ҎԼͷ༷ͳॲཧ΋ςετ͕ॻ͖ͮΒ͍ w "1*ॲཧ w %#ૢ࡞ w %0.ૢ࡞ w ؤுͬͯςετ༻࡞ͬͯ΋͍͍͚Ͳ͊͞ʜ

Slide 20

Slide 20 text

Ͳ͏͢Δ͔ w ґଘϞδϡʔϧΛελϒʹࠩ͠ସ͑ͨϞοΫΛ ࡞Ζ͏

Slide 21

Slide 21 text

DIFDLFSKT // checker.js // ໨ࠇ۠ຽҰཡΛimport import people from 'meguro'; /** * @description ໨ࠇ۠ຽ͔Ͳ͏͔νΣοΫ͢Δ * @param {String} name * @return {Boolean} */ export default function isMeguroJser(name) { return (people.indexOf(name) > 0); } ςετͷ͚࣌ͩ ͜͜Λελϒʹ͢Δ

Slide 22

Slide 22 text

Ͳ͏΍ͬͯ Ňŏ﹏ŏ ʁ

Slide 23

Slide 23 text

͓·ͨͤ

Slide 24

Slide 24 text

QSPYZRVJSFKT w ຊ೔ͷຊ୊ w ҰݴͰݴ͏ͱʮJNQPSUΛϞοΫ͢ΔʯͨΊͷ OQNϥΠϒϥϦ w ࢖͍ํ͕ඇৗʹγϯϓϧ

Slide 25

Slide 25 text

QSPYZRVJSFKT w ಺෦࣮૷͸JNQPSUͷϥούʔ w JNQPSU͢ΔϞδϡʔϧ͕౉ͨ͠ελϒΛJNQPSU ͢ΔΑ͏ʹࡉ޻͢Δ

Slide 26

Slide 26 text

ී௨ͷJNQPSU JNQPSU JNQPSU

Slide 27

Slide 27 text

QSPYZRVJSFKT JNQPSU JNQPSU ೚ҙͷϞδϡʔϧΛ ελϒʹͰ͖Δ

Slide 28

Slide 28 text

࢖ͬͯΈΑ͏ʂ

Slide 29

Slide 29 text

QFPQMFKTΛελϒʹ͢Δ UFTUKT DIFDLFSKT ελϒ QFPQMFKT JNQPSUQFPQMFGSPNbQFPQMF` Ͱελϒ͕ฦΔ༻ʹ͢Δ

Slide 30

Slide 30 text

DIFDLFSKTΛϞοΫ import proxyquire from 'proxyquire'; const stubs = { people: [ 'sota4567', 'sota4568', ], }; const mockChecker = proxyquire('./checker', stubs);

Slide 31

Slide 31 text

DIFDLFSKTΛϞοΫ import proxyquire from 'proxyquire'; const stubs = { people: [ 'sota4567', 'sota4568', ], }; const mockChecker = proxyquire('./checker', stubs); ୈҰҾ਺ʹελϒΛ஫ೖ͢ΔϞδϡʔϧ NPDL$IFDLFSʹೖΔͷ͸͜ͷϞδϡʔϧ

Slide 32

Slide 32 text

DIFDLFSKTΛϞοΫ import proxyquire from 'proxyquire'; const stubs = { people: [ 'sota4567', 'sota4568', ], }; const mockChecker = proxyquire('./checker', stubs); ୈೋҾ਺ʹελϒ

Slide 33

Slide 33 text

DIFDLFSKTΛϞοΫ import proxyquire from 'proxyquire'; const stubs = { people: [ 'sota4567', 'sota4568', ], }; const mockChecker = proxyquire('./checker', stubs); ୈೋҾ਺ʹελϒ ελϒ͍ͨ͠ϞδϡʔϧΛ LFZWBMVFܗࣜͰ౉͢

Slide 34

Slide 34 text

मਖ਼൛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(); }); });

Slide 35

Slide 35 text

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`ؚ͕·ΕΔ

Slide 36

Slide 36 text

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ϞδϡʔϧΛελϒ ۠ຽ͕୭΋͍ͳ͍͜ͱʹ

Slide 37

Slide 37 text

.JTTJPO$PNQMFUF w JNQPSUΛελϒʹͰ͖ͨʂ

Slide 38

Slide 38 text

ॴײ w ಺෦࣮૷ݟ͚ͨͲ͖ͪΜͱ࡞ͬͯ͋Δ͠ΨϯΨ ϯ࢖͑͹͍͍ͱࢥ͏ w ֶशίετ͸ΊͪΌͪ͘Ό௿͍ w ҰԠ͍Ζ͍ΖΦϓγϣϯ͋Δ͚Ͳݸਓతʹ͸ ඪ४ػೳͰॆ෼ w ΈΜͳ࢖͓͏

Slide 39

Slide 39 text

ͪͳΈʹ w ࣅͨ΋ͷͰSFXJSFKTͱ͍͏ͷ΋͋Δ w QSPYZRVJSF͸ઌʹελϒ஫ೖ͢Δ͚ͲSFXJSF ͸TFUUFS HFUUFS͕͋Δ w Ͳ͕͍͍ͬͪͱ͔͸ݸਓతʹͳ͍ͷͰ͓޷ΈͰ Ͳ͏ͧ

Slide 40

Slide 40 text

Ҏ্ʂ