Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
220
再発防止策を考える技術 / #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
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
180
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.9k
Railsバージョンを4倍にした話
optim
0
350
SREの越境 / SRE Collaboration
y0hgi
2
310
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
phperだってパンチカードでコーディングしたい
o0h
PRO
0
330
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.5k
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
590
ジョジョの世界をXRで再現する
mofurune
0
160
Simple Storage Service(S3) is not simple
iwatsukayura
0
290
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
750
Featured
See All Featured
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
Abbi's Birthday
coloredviolet
4
10k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
600
Site-Speed That Sticks
csswizardry
13
1.6k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
The Cult of Friendly URLs
andyhume
79
7k
The browser strikes back
jonoalderson
0
1.8k
First, design no harm
axbom
PRO
2
1.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 Ͳ͕͍͍ͬͪͱ͔ݸਓతʹͳ͍ͷͰ͓ΈͰ Ͳ͏ͧ
Ҏ্ʂ