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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
390
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
2.9k
App Intentsのビルドプロセスを支える技術
kntkymt
0
370
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
120
Jetpack Compose メカニズム
skydoves
0
420
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
200
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
280
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
370
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
230
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
2.7k
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
690
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
280
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
360
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Paper Plane (Part 1)
katiecoart
PRO
2
11k
Scaling GitHub
holman
464
140k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
300
Optimising Largest Contentful Paint
csswizardry
37
4k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
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 Ͳ͕͍͍ͬͪͱ͔ݸਓతʹͳ͍ͷͰ͓ΈͰ Ͳ͏ͧ
Ҏ্ʂ