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
20180125mocha.jsとbackstop.jsで大規模リニューアルのリグレッショ...
Search
moyashidaisuke
January 27, 2018
Technology
750
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
20180125mocha.jsとbackstop.jsで大規模リニューアルのリグレッションテスト
moyashidaisuke
January 27, 2018
More Decks by moyashidaisuke
See All by moyashidaisuke
個人開発がやりたくなる本を読んでモチベーションアップを図る話
moyashidaisuke
0
60k
アプリ名を変更するプラグインを作った話
moyashidaisuke
0
150
20180315これで簡単Laravelの認証処理をカスタマイズ
moyashidaisuke
0
1k
PHP製マーケティングオートメーション(MA)ツール Mauticの紹介
moyashidaisuke
0
860
20170621LaravelでDeployer
moyashidaisuke
0
540
Other Decks in Technology
See All in Technology
データサイエンスを価値につなげるプロジェクト設計 〜 DS一年目が現場で得た気づき 〜
ysd113
1
230
AIの性能が向上しても未解決な組織の重大問題は何か?/An Unsolved Organizational Problem in the Age of AI
moriyuya
4
660
RSA暗号を手計算したくなること、ありますよね?? (20260615_orestudy6_rsa)
thousanda
0
370
Claude Codeをどのように キャッチアップしているか
oikon48
12
7.7k
ルールやカスタム機能、どう活かす?ハンズオンで体感するIBM Bobの出力コントロール
muehara
1
150
SONiCで構築・運用する生成AI向けパブリッククラウドネットワーク ~実装編~
sonic
0
190
あなたの知らないPDFのアクセシビリティ
lycorptech_jp
PRO
0
180
AWSシリコン最前線 〜AI時代のチップ選択を読み解く〜
htokoyo
2
590
"何を作るか"を任される エンジニアは、どう育つのか
yutaokafuji
1
670
2026TECHFRESH畢業分享會 - 葬送的通靈師:化系統與用戶雜訊成行動訊號
line_developers_tw
PRO
0
960
機械学習を「社会実装」するということ 2026年夏版 / Social Implementation of Machine Learning June 2026 Version
moepy_stats
5
2.1k
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
960
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Optimizing for Happiness
mojombo
378
71k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
Designing for Performance
lara
611
70k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
850
Designing Powerful Visuals for Engaging Learning
tmiket
1
410
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
Context Engineering - Making Every Token Count
addyosmani
9
960
Optimising Largest Contentful Paint
csswizardry
37
3.7k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
370
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
730
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
Transcript
mocha.jsͱbackstop.jsͰେن ϦχϡʔΞϧͷϦάϨογϣ ϯςετ 2018/01/25 meguro.es #13 @ ϥΫεϧ༷
ࣗݾհ • ͡Ί·ͯ͠ • ాେཌྷʢ;͍͚ͩͩ͘͢ʣ • @moyashidaisuke • ίϩϓϥ ->
ΈΜΕͼ • αʔόαΠυΑΓͰ͕͢ϑϩϯτΓ· ͢ɻੲjsͱcssͰΨνϟԋग़࡞ͬͨΓͯ͠ ·ͨ͠ɻ • ࠇࡏॅ
5NB8FP(A4M ,- .& !B .QXSYWUV#/2E"C82+ D? 6<=2E9/ :B>'$B1LHE;.2EB0B"AL<;*@RSTD? 7GKN=2E9/
')B8FIP A4KNMJ3A/ O6LI92%?82'$B LPBA8E9/
େنϦχϡʔΞϧ͠·ͨ͠ ʢ༷ಉ͡··ʣ
ର • ͓͞Μศʢhttps://obousan.minrevi.jp/ʣ • Ϩεϙϯγϒ • IDҧؚ͍Ίͯϖʔδ600͘Β͍ • ΄ͱΜͲ͕੩తϖʔδ
چڥ • WordpressͷݻఆϖʔδΦϯϦʔ • Ϩϯλϧαʔό1ߏ
৽ڥ • Laravel + WordpressʢRestAPIʣ • AWSʢEC2ɺCloudFrontɺS3ɺALBɺRDSʣ • ͍ͭͰʹϑϧHTTPSԽ
എܠ • HP͡Όͳͯ͘WEBαʔϏεͱͯ͠ػೳՃ͠ ͍͖͍ͯͨ • Խͯ͠ͳ͍ͷͰ·ΕʹΑ͘མͪΔ • εύήςΟ • ࣌ͷ୲ऀෆࡏͰਖ਼͍༷͠ෆ໌
ϦάϨογϣϯςετ
Γ͍ͨࣄ • ͱΓ͋͑ͣݟͨಉ͡ΛΩʔϓ͍ͨ͠ • SEOؤுͬͯΔͷͰmetaλάͱ͔Ωʔϓ͠ ͍ͨ
ݟͨΩʔϓ
Backstop.js • https://github.com/garris/BackstopJS • ϒϥβදࣔͨ݁͠ՌΛը૾Ͱอଘ • ը૾ಉ࢜Λൺֱͯ͠diffΛग़ͯ͘͠ΕΔ • ը໘αΠζࢦఆͰ͖ΔͷͰɺPCͱεϚϗ྆ํ νΣοΫՄೳ
݁Ռ
݁Ռ
࢝Ίํ npm i phantomjs casperjs -g npm i backstopjs -g
backstop reference backstop test
ઃఆϑΝΠϧ { "viewports": [ { "label": "phone", "width": 320, "height":
480 }, { "label": "tablet", "width": 1024, "height": 768 } ], "scenarios": [ {"label": "/","url": “https://testdomain/" ,"referenceUrl": "http://obousan.minrevi.jp/"}, {"label": "/aisatsu-reibun/","url": “https://testdomain/aisatsu-reibun/", "referenceUrl": "http://obousan.minrevi.jp/aisatsu-reibun/"}, ], Ωϟϓνϟ͍ͨ͠ ը໘αΠζ ରͷ63-Λྻڍ
metaλάͱ͔Ωʔϓ
mochaͱcheerio-httpcliͰࣗ࡞ • mocha -> testingͷFW • cheerio-httpcli -> εΫϨΠϐϯά •
ؤுͬͯεΫϨΠϐϯάͯ͠metaλάΛऔಘ͠ ͯɺassert͢Δ • େͨ͠ࣄ͍ͯ͠ͳ͍ͷͰ͋Γͦ͏Ͱແ͔ͬͨʢ͋ͬ ͨΒڭ͍͑ͯͩ͘͞ʂʣ
εΫϦϓτͪΒݟͤ function getSeoData(url) { const data = {}; const result
= client.fetchSync(url); data.title = result.$('title').text(); data.keywords = result.$('meta[name="keywords"]').attr('content'); return data; } describe(senario.url, () => { let newSeoData, oldSeoData; before(done => { newSeoData = getSeoData(newUrl); oldSeoData = getSeoData(oldUrl); done(); }); // ҎԼςετέʔε it('title', () => { assert.equal(newSeoData.title, oldSeoData.title); }); it('keywords', () => { assert.equal(newSeoData.keywords, oldSeoData.keywords); }); }); });
݁Ռ
ۤ࿑ͱ͔ͱ͔
ۤ࿑ͱ͔ͱ͔ • backstopͷ݁Ռϖʔδ͕ॏ͍ͨͷʢը૾͕େྔʣͰదͷ·ͱ Ίͳ͍ͱ։͚ͳ͍ • ग़ྗ݁ՌΛάϧʔϐϯάͰ͖ͳ͍ͷͰɺઃఆϑΝΠϧ͝ͱ͚ Δඞཁ͕͋Δ • ͦΕͰॏ͔ͨͬͨͷͰʢ100ը໘Ͱ1GB͘Β͍ɺɺɺʣɺS3 ʹhostingͨ͠
• backstop ϖʔδϦϯΫ͕ແ͍ͷͰؤுͬͯεΫϩʔϧɺɺɺ • ݁ߏ͔͔࣌ؒΔͷͰɺશϖʔδΛରʹ͢Δͷதʹ࣮ߦ
QA