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
component test
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
bokuweb
July 30, 2017
5.2k
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
component test
Kyoto.js 13の発表資料です
bokuweb
July 30, 2017
More Decks by bokuweb
See All by bokuweb
1000 行で実現する Linux on Browser
bokuweb
17
9.9k
gocon2019.pdf
bokuweb
5
14k
emscripten_night_7.pdf
bokuweb
1
1.6k
ファミコンエミュレータの創り方
bokuweb
58
46k
Featured
See All Featured
Building Applications with DynamoDB
mza
96
7.2k
Statistics for Hackers
jakevdp
799
230k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Abbi's Birthday
coloredviolet
4
10k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
380
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Color Theory Basics | Prateek | Gurzu
gurzu
1
490
Rails Girls Zürich Keynote
gr2m
96
14k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
890
The SEO Collaboration Effect
kristinabergwall1
1
600
Transcript
Ϩεͳίϯϙʔωϯτ ςετΛࢦͯ͠ !CPLVXFC
!CPLVXFC IUUQCMPHCPLVXFCNF w ݩΈࠐΈϋʔυ3VTUʹڵຯ͋Γ·͢ w ࢁ͔ΒԼΓ͖ͯ·ͨ͠ w ۀͰ"OHVMBSझຯͰ3FBDU ࣗݾհ CPLVXFC
w ͜Ε·Ͱͷίϯϙʔωϯτͷςετͱ 7JTVBM5FTUJOHʹࢸΔ·Ͱ w ࣮ફ7JTVBM5FTUJOH w ൵͍ࣦ͠ഊྫͱҙ ͢͜ͱ
͜Ε·Ͱͷίϯϙʔωϯτͷςετͱ 7JTVBM5FTUJOHʹࢸΔ·Ͱ
ίϯϙʔωϯτͷςετ Ͳ͏ͬͯ·͔͢ʁ
۪ʹΞαʔτ
۪ʹΞαʔτ ҎԼ&O[ZNFʹهࡌ͋ͬͨྫ import React from 'react'; import { expect }
from 'chai'; import { render } from 'enzyme'; import Foo from './Foo'; describe('<Foo />', () => { it('renders three `.foo-bar`s', () => { const wrapper = render(<Foo />); expect(wrapper.find('.foo-bar').length).to.equal(3); }); it('renders the title', () => { const wrapper = render(<Foo title="unique" />); expect(wrapper.text()).to.contain('unique'); }); });
AFYQFDU XSBQQFSUFYU UPDPOUBJO bVOJRVF AͷΑ͏ͳ ΞαʔγϣϯΛॻ͘ͱมߋʹऑ͘ɺϝϯςφϯε͕େม 5BCMFͰʮOߦ͕IPHFͰ͋Δ͜ͱɺNߦ͕GVHBͰ͋Δ͜ͱʯ ɹͷΑ͏ʹɺͪ·ͪ·Ξαʔγϣϯ͢Δͷෆໟ͔ͭݱ࣮తͰͳ͍ ݁ՌʮςʔϒϧͷSPX͕ߦ͋Δ͜ͱʯͷΑ͏ͳ;Θͬͱͨ͠ ɹςετʹͳΓ͕ͪʜ
؊৺ͳͱ͖ʹςετ͕མͪͳ͔ͬͨΓ ্هΛ͍͍ԘകͰߦ͍͍ͨ ͬͯΈͯ
ͬͱָʹ͍͍ԘകͰ ςετͰ͖ͳ͍͔
4OBQTIPUUFTUJOH
w ɹɹɹ"7"ɹɹ+FTU͕αϙʔτ w ίϯϙʔωϯτͷϨϯμϦϯά݁Ռ TOBQTIPU ΛKTPOͰอଘ લճ݁ՌΛਖ਼ͱ͠ࠓճ݁Ռͱൺֱɺ͕ࠩग़ͨ߹ɺࣦഊͱ͢Δ 4OBQTIPU5FTUJOH
"7"Ͱͷ༻ྫ ςετίʔυྫ import test from 'ava'; import React from 'react';
import render from 'react-test-renderer'; const HelloWorld = () => <h1>Hello World!</h1>; test('React Component snapshot test', t => { const tree = render.create( <HelloWorld /> ).toJSON(); t.snapshot(tree); }); 5&45@/".&UFTUKTTOBQͷΑ͏ͳܗࣜͷεφοϓγϣοτϑΝΠϧ ʹอଘ͞ΕΔ ͜ΕΛ࣍ճFYQFDUFEͱ͢Δ
10: ).toJSON(); 11: t.snapshot(tree); 12: }); Did not match snapshot
Difference: <h1> - Hello World..!? + Hello World! </h1> "7"Ͱͷ༻ྫ A)FMMP8PSMEAA)FMMP8PSME Aมߋ࣌ςετ݁Ռ
ྑ͍
ҰࢹͰ֬ೝඞཁ͕ͩࡉʑͨ͠Ξαʔγϣϯ͕͍Βͳ͍ ֬ೝޙɺVΦϓγϣϯͰͬ͘͞ͱFYQFDUFEͷߋ৽͕Ͱ͖Δ ࢠίϯϙʔωϯτͷมߋݕग़Ͱ͖Δ ݟͨͷςετ·ͰͰ͖ͳ͍ DTTϑΝΠϧʹEJTQMBZOPOFͷΑ͏ͳมߋ͕ҙਤͤͣ ೖͬͯTOBQTIPUςετQBTT͢Δ ࢠίϯϙʔωϯτͷมߋʹΑΔίϯϙʔωϯτͷݟ͕ͨ ͲͷΑ͏ʹมΘ͔͔ͬͨΒͳ͍ ͬͯΈͯ
ίϯϙʔωϯτͷݟͨ·Ͱ ؚΊͯςετͰ͖ͳ͍͔
7JTVBMUFTUJOH
w ςετ࣌ʹίϯϙʔωϯτͷϨϯμϦϯά݁ՌΛը૾Ωϟ ϓνϟΛऔಘɺҎલQBTTͨ͠ը૾Λਖ਼ͱ͠ࠓճ݁Ռͱൺ ֱɺ͕ࠩग़ͨ߹ɺࣦഊͱ͢Δ w ཁલड़ͷ4OBQTIPU5FTUJOHͷը૾൛ 7JTVBM5FTUJOH
ٹ͍͍ͨྫ Search large… ! ݕࡧ ϘλϯʹQBEEJOH Ճͯ͠ʔ ྫ 4FBSDI'PSNKTY
ٹ͍͍ͨྫ Search large… ! ŝƄŒŖ ݕࡧ ίϯϙʔωϯτʹมߋ͕ೖͬͨࡍʹɺมߋ͞ΕͨίϯϙʔωϯτΛ ༻͍ͯ͠Δίϯϙʔωϯτͷݟͨ·Ͱ֬ೝ͕Ͱ͖Δ ྫ 4FBSDI'PSNKTY
ҙਤͤͣൃੜ্ͨ͠هͷΑ͏ͳέʔεʹؾ͖͍ͮͨ
%&.0
ҰࢹͰ֬ೝඞཁ͕ͩࡉʑͨ͠Ξαʔγϣϯ͕͍Βͳ͍ ݟؚͨΊͯςετ͕Մೳ ࢠίϯϙʔωϯτͷมߋʹΑΔίϯϙʔωϯτͷݟͨ ͷࠩ·Ͱݕग़Ͱ͖Δ ڥͷߏங͕େม ޙड़ 䠼࣮%0.ςετεΫϦʔϯγϣοτΛͱΔΈ͕ඞཁ ޙड़
ϑϧϨϯμϦϯάͳͷͰॏ͍ ͬͯΈͯ
࣮ફ7JTVBM5FTUJOH
ᶃςετ࣌ʹίϯϙʔωϯτͷTDSFFOTIPUΛอଘ͢Δ ᶄ(JUͷཤྺΛ୧ͬͯɺൺֱର FYQFDUFE ͱ͢ΔTDSFFOTIPUΛ 4͔Βμϯϩʔυ͢Δ ᶅࠓճͷTDSFFOTIPU BDUVBM ͱFYQFDUFEͷൺֱΛߦ͏ ᶆࠓճͷTDSFFOTIPU BDUVBM
ͱEJ⒎ը૾ͱIUNMϨϙʔτΛHJUͷ DPNNJUIBTIΛΩʔʹ4ʹΞοϓϩʔυ BDUVBM࣍ճҎ߱ͷFYQFDUFEީิͱͳΔ ᶇ4MBDLɺHJUIVCʹ݁ՌΛ௨ $*ͰͷྲྀΕ
ςετ࣌ͷTDSFFOTIPUอଘ ࣮%0.ʹϨϯμϦϯάͭͭ͠εΫϦʔϯγϣοτΛࡱΔඞཁ͕͋Δ w LBSNBOJHIUNBSF /JHIUNBSFΛىಈ͢ΔLBSNBϓϥάΠϯ w "WBSPO "7"ΛFMFDUSPO্ͷQSPDFTTͰಈ࡞ͤ͞ΔϞδϡʔϧ લड़ͷTOBQTIPUUFTUJOHซ༻Մೳ
ཁFMFDUSPOͷSFOEFSFSʹඳը͠ɺTDSFFOTIPUΛࡱΔ࡞ઓ
ςετ࣌ͷTDSFFOTIPUอଘ ςετίʔυྫ "WBSPO SFBDU import test from 'ava'; import
React from 'react'; import { render } from 'react-dom'; import { screenshot } from 'avaron'; const Example = () => <h1>Hello World!</h1>; test('React Component snapshot test', async t => { ɹrender(<Example />, document.querySelector('.main')); await screenshot('screenshots/sample.png'); }); TBNQMFQOHͱ͍͏QOH͕อଘ͞ΕΔ
(JUͷཤྺΛ୧ͬͯൺֱରΛऔಘ NBTUFS UPQJD FYQFDUFE BDUVBM ରͷDPNNJUIBTIΛಛఆ͠ɺͦΕΛΩʔʹFYQFDUFEΛμϯϩʔυ 13 )&"%
BDUVBMͱFYQFDUFEͷൺֱ w SFHDMJ ը૾ൺֱΛߦͬͯEJ⒎ͱIUNMϨϙʔτΛੜ JNBHFNBHJDLʹґଘ͕ͯͨ͠JNHEJ⒎KTҠߦ QVSF+4
४උ͕໘ w 4ͷόέοτ࡞ w (JUͷIBTI୳ࡧ w ը૾ൺֱ w 4ͷΞοϓϩʔυ w
4MBDL௨ w HJUIVC௨
SFHTVJU IUUQTSFHWJ[HJUIVCJPSFHTVJU DSFBUFECZ!2VSBNZ લทͷ໘ͳ࡞ۀΛαϙʔτͯ͘͠ΕΔ TBNQMFT IUUQTHJUIVCDPNSFHWJ[SFHTJNQMFEFNP IUUQTHJUIVCDPNCPLVXFCSFBDUBWBSPOSFHTBNQMF
൵͍ࣦ͠ഊྫͱҙ
൵͍ࣦ͠ഊྫ BDUVBM FYQFDUFE EJ⒎ * { transition: none !important; animation:
none !important; } Ϙλϯ͕ΞΫςΟϒʹͳͬͨࡍͷUSBOTJUJPOͰඍົʹ৭ҧ͏ UFTUͷpYUVSFIUNMʹҎԼΛಥͬࠐΜͩ ʂʁ
൵͍ࣦ͠ഊྫ BDUVBM ίετͷߴ͍ϖΠϯτ͕ؒʹ߹ͬͯͳ͔ͬͨ TDSFFOTIPUऔಘ·Ͱͪ࣌ؒΛগ͠Ճ ࠩݕग़ʹ͖͍͠Λઃఆ ݱঢ়͘Β͍ FYQFDUFE EJ⒎ ʂʁ
w 7JTVBM5FTUJOHݟؚͨΊͯςετͰ͖ͯ࠷ߴ w ࣮ߦ࣌ؒͱτϨʔυΦϑ w ҆ఆͨ͠εΫϦʔϯγϣοτ͕औΕΔΑ͏ߟྀ͕ඞཁ w ࠓޙ֎෦αʔϏεͳͲؚΊͯબࢶ૿͖͑ͯͦ ͏ ݴ͍͔ͨͬͨ͜ͱ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠