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
Unit Testing For React Component
Search
camcam_lemon
February 22, 2018
Programming
1
74
Unit Testing For React Component
camcam_lemon
February 22, 2018
Tweet
Share
More Decks by camcam_lemon
See All by camcam_lemon
iOSのキーボード入力ビューをカスタマイズする
lemon
0
71
視え方と文字の大きさ
lemon
1
310
Yarn WorkSpaces × React Nativeの環境構築
lemon
0
220
フロントエンドにおけるアーキテクチャとの向き合い方
lemon
10
4.6k
UI/UXデザイナーがデザインしてるもの
lemon
2
300
react-reduxで追加されたHooks APIの良い所と使い方
lemon
5
880
ESLintで始めるTypeScriptの静的解析
lemon
8
1.9k
SEがエンジニアに目覚めデザイナーに転身した冒険譚
lemon
6
1.4k
React.lazyとSuspenseで行うLazy Load
lemon
2
380
Other Decks in Programming
See All in Programming
StreamlitとTerraformでデータカタログを作った話
gussan0223
0
300
"config" ってなんだ? / What is "config"?
okashoi
0
220
try! Swift Tokyo 2024 参加報告 / try! Swift Tokyo 2024 Report
hironytic
0
170
Folding Cheat Sheet #2
philipschwarz
PRO
0
110
Tailwind CSSを本気でカスタマイズする方法
fsubal
2
260
Git Rebase
bkuhlmann
11
1.6k
スキーマ駆動開発による品質とスピードの両立 - 私達は何故、スキーマを書くのか
kentaroutakeda
0
120
⼤規模⾔語モデルの拡張(RAG)が 終わったかも知れない件について
nearme_tech
22
15k
受託開発でGitLab CI を活用していく
xiombatsg
1
270
Ruby製社内ツールのGo移行
bgpat
2
330
[SF Ruby, March 2024] Rails on Wasm
palkan
0
380
코틀린으로 멀티플랫폼 만들기
pangmoo
0
120
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
455
32k
Into the Great Unknown - MozCon
thekraken
10
980
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
29
6k
Clear Off the Table
cherdarchuk
83
310k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
24
2.3k
Designing for Performance
lara
601
67k
Docker and Python
trallard
33
2.7k
Fashionably flexible responsive web design (full day workshop)
malarkey
397
65k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
1
1.3k
Typedesign – Prime Four
hannesfritz
36
2.1k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
226
16k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
115
18k
Transcript
UNIT TESTING FOR REACT COMPONENTS
Instructions Name @camcam_lemon (甲斐田 亮一) Occupation フロントエンドエンジニア Company 日本事務器株式会社 Hobby
お酒作る(飲む)の大好きマン スノボうまくなりたいマン
Use Testing Tools Testing framework - mocha Coverage - nyc
- istanbul Assertion - power-assert Test helper - jsdom - enzyme - sinon - testdouble.js - fetch-mock
Use Testing Tools Testing framework - mocha Coverage - nyc
- istanbul Assertion - power-assert Test helper - jsdom - enzyme - sinon - testdouble.js - fetch-mock
“ ReactComponentのテスト どうやって書いてますか・・・?
“ refのテストってどう書くんだろ・・・?
“ イベントハンドラは・・・
“ クライアント座標って・・・
公式ページ見ただけじゃ あんまりテスト書けないよ
テストで詰まりそうなポイント ▸ refコールバック ▸ DOMオブジェクトへのアクセス ▸ 引数有りのイベントハンドラ ▸ 時間がからむ処理(setTimeout()) ▸
グローバルオブジェクトへのアクセス ▹ location絡むとたいていイく
refコールバック ▸
[email protected]
からref情報を読み込むよう になった ▸ refが文字列属性かコールバック属性かで テストの仕方が変わる
“
“
このままだとテストは死ぬ
“
DOMオブジェクトへのアクセス ▸ DOMの情報はテスト環境では空のオブジェ クトになっている ▸ getBoundingClientRect()など一部のメソッ ドはmount()でレンダーすれば取得できる (返り値は常に0)
shallowでテストできないんだ・・・ Material-UIラップしてるからmount()できな いよ・・・
“ shallowでもテストできます 値も設定することができる!!
“
“
引数有りのイベントハンドラ ▸ simulate()の第2引数以降にモックオブジェ クトを渡すことができる ▸ instance()から実行することもできる
“
“
ReduxFormのprops inputとmetaオブジェクトを渡すだけ!
“
“
時間がからむ処理 ▸ 時間を上書きしてザ・ワールド ▸ testdouble.jsではtestdouble-timersを使用 してテストする
“
“
グローバルオブジェクトへのアクセス ▸ jsdomのuserAgentやlocation等は直接書き 換えることができない ▸ windowを明示するかどうかでテストの仕方 (と難易度)が変わる ▸ console, userAgent,
locationだけ説明しま す!
console 実行されるけど、確認の方法がわからん!! シェルに出力したくない!!
“
userAgent
None
setterがない・・・!! ないなら作り変えてしまおう!!
“
“
“
location
ただし・・・
元コードの中で location.search = ‘’; location.href = ‘’; が実行されると無事死亡
作り変えることもできない・・・
知っている人いたら 教えてください