Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
importをモックする話
Search
Sota Sugiura
June 20, 2016
Programming
2.5k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
importをモックする話
Meguro.es #4 で発表しました。
Sota Sugiura
June 20, 2016
More Decks by Sota Sugiura
See All by Sota Sugiura
内製したSlack Appで頑張るIncident Response@Waroom Meetup #1 / Incident Response with Slack App in 10X
sota1235
0
2k
20220926_セキュリティチームの今_for_Drs._Prime_公開用.pdf
sota1235
0
210
再発防止策を考える技術 / #phpconsen
sota1235
10
4.1k
How to choose the best npm module for your team?
sota1235
9
680
Realtime Database for high traffic production application
sota1235
7
4.3k
Road to migrate JP Web as a microservice
sota1235
4
1.8k
インターフェース再入門 / Think Interface again
sota1235
6
11k
再発防止策を考える技術 #phpconfuk_rej
sota1235
1
1.4k
Update around Firebase #io18
sota1235
3
4.5k
Other Decks in Programming
See All in Programming
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
120
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
260
Deep dive into the select statement (GopherCon UK)
jespino
0
170
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
410
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
160
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
信頼性の目標を誰も求めてない
shubox
0
490
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
340
AIエージェント時代のコードレビューを設計する
nogu66
6
2.5k
Go 1.27からのGODEBUG / Go 1.27 リリースパーティ #go127party
mazrean
0
320
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
2
1.6k
Laravelのアプリケーションをどこにデプロイするか #ツナギメオフライン.9
akase244
0
120
Featured
See All Featured
Music & Morning Musume
bryan
47
7.4k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
4 Signs Your Business is Dying
shpigford
187
23k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
How GitHub (no longer) Works
holman
316
150k
Crafting Experiences
bethany
1
300
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
KATA
mclloyd
PRO
35
15k
Designing Experiences People Love
moore
143
24k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
570
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
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 Ͳ͕͍͍ͬͪͱ͔ݸਓతʹͳ͍ͷͰ͓ΈͰ Ͳ͏ͧ
Ҏ্ʂ