$30 off During Our Annual Pro Sale. View Details »
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
85
Unit Testing For React Component
camcam_lemon
February 22, 2018
Tweet
Share
More Decks by camcam_lemon
See All by camcam_lemon
オレを実装してデザイン実装楽したい
lemon
0
60
要素のサイズを変えずに押しやすくする
lemon
0
78
iOSのキーボード入力ビューをカスタマイズする
lemon
0
260
視え方と文字の大きさ
lemon
1
420
Yarn WorkSpaces × React Nativeの環境構築
lemon
0
300
フロントエンドにおけるアーキテクチャとの向き合い方
lemon
10
5k
UI/UXデザイナーがデザインしてるもの
lemon
2
330
react-reduxで追加されたHooks APIの良い所と使い方
lemon
5
1k
ESLintで始めるTypeScriptの静的解析
lemon
8
2.1k
Other Decks in Programming
See All in Programming
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
250
How Software Deployment tools have changed in the past 20 years
geshan
0
28k
【CA.ai #3】ワークフローから見直すAIエージェント — 必要な場面と“選ばない”判断
satoaoaka
0
220
Integrating WordPress and Symfony
alexandresalome
0
130
配送計画の均等化機能を提供する取り組みについて(⽩⾦鉱業 Meetup Vol.21@六本⽊(数理最適化編))
izu_nori
0
130
AIエンジニアリングのご紹介 / Introduction to AI Engineering
rkaga
3
1.2k
社内オペレーション改善のためのTypeScript / TSKaigi Hokuriku 2025
dachi023
1
510
[SF Ruby Conf 2025] Rails X
palkan
0
450
俺流レスポンシブコーディング 2025
tak_dcxi
13
8k
『実践MLOps』から学ぶ DevOps for ML
nsakki55
2
560
Evolving NEWT’s TypeScript Backend for the AI-Driven Era
xpromx
0
280
Developing static sites with Ruby
okuramasafumi
0
160
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
50
14k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.1k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.3k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
Visualization
eitanlees
150
16k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
Code Review Best Practice
trishagee
73
19k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
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 = ‘’; が実行されると無事死亡
作り変えることもできない・・・
知っている人いたら 教えてください