Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Inside Frontend 2 #insideFE
Report
Hiroyuki Anai
Follow
Feb. 11, 2018
•
0 likes
1 likes
×
Be the first to like this
Show More
•
6,416 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Check these out next
T sql の parse と generator
Oda Shinsuke
アップルのテンプレートは有害と考えられる
Brian Gesiak
Javaセキュアコーディングセミナー東京第3回演習の解説
JPCERT Coordination Center
Development app-with-elixir
k1complete
オープンソースでExcelレポートプログラミング
Sho Okada
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
Tsuyoshi Yamamoto
TypeScript 言語処理系ことはじめ
Yu Nobuoka
Laravel勉強会(データベーステスト編)
AyakaNishiyama
1
of
56
Top clipped slide
Inside Frontend 2 #insideFE
Feb. 11, 2018
•
0 likes
1 likes
×
Be the first to like this
Show More
•
6,416 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Technology
https://inside-frontend.com/
Hiroyuki Anai
Follow
Advertisement
Advertisement
Advertisement
Recommended
Unit test in android
Tatsuya Maki
1.9K views
•
92 slides
関西Php勉強会のlimeの話
Hisateru Tanaka
1.4K views
•
38 slides
明日から使える Java SE 7
Yuichi Sakuraba
1.3K views
•
17 slides
Local php-100828 2
Akio Ishida
977 views
•
22 slides
Clojrue 13 testing
Kiyotaka Kunihira
616 views
•
17 slides
CakeRequest::onlyAllow() について
Yuya Takahashi
4.5K views
•
13 slides
More Related Content
Slideshows for you
(20)
T sql の parse と generator
Oda Shinsuke
•
2.2K views
アップルのテンプレートは有害と考えられる
Brian Gesiak
•
16.8K views
Javaセキュアコーディングセミナー東京第3回演習の解説
JPCERT Coordination Center
•
413 views
Development app-with-elixir
k1complete
•
1K views
オープンソースでExcelレポートプログラミング
Sho Okada
•
2.3K views
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
Tsuyoshi Yamamoto
•
687 views
TypeScript 言語処理系ことはじめ
Yu Nobuoka
•
3.2K views
Laravel勉強会(データベーステスト編)
AyakaNishiyama
•
215 views
xUnit Test Patterns - Chapter19
Takuto Wada
•
4.3K views
Composable Callbacks & Listeners
Taisuke Oe
•
2.6K views
Introduction to Continuous Test Runner MakeGood
Atsuhiro Kubo
•
1.2K views
from old Java to modern Java
心 谷本
•
35.4K views
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
なおき きしだ
•
11.7K views
Java scriptによるテスト駆動開発
Hidekazu Nakamura
•
1.5K views
CPANの依存モジュールをもう少し正しく検出したい
charsbar
•
3.3K views
Javaセキュアコーディングセミナー東京第3回演習
JPCERT Coordination Center
•
363 views
PHP5.5新機能「ジェネレータ」初心者入門
kwatch
•
22.2K views
2017年夏のPerl
charsbar
•
6.4K views
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
•
21.1K views
Qunit再入門 (Version 1.10.0 編)
Koji Nakamura
•
4.3K views
Similar to Inside Frontend 2 #insideFE
(20)
React Native GUIDE
dcubeio
•
1.3K views
Java EE8 Report
Norito Agetsuma
•
8.2K views
test
a1yama1123
•
188 views
Sencha ug3 siesta_share
久司 中村
•
965 views
Apache Torqueについて
tako pons
•
2.2K views
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
Fujio Kojima
•
1.8K views
Neo4j の「データ操作プログラミング」から 「ビジュアライズ」まで
Keiichiro Seida
•
7.4K views
Jenkins plugin memo
Kiyotaka Oku
•
4K views
Try Jetpack
Hideaki Miyake
•
1.1K views
Angular2 rc.1 unit testing overview
Mitsuru Ogawa
•
1.7K views
イマドキの現場で使えるJavaライブラリ事情
takezoe
•
24.8K views
Android test tutorial
Kazuaki Ueda
•
1K views
分散ストリーム処理フレームワーク Apache S4
AdvancedTechNight
•
3.7K views
traceur-compilerで ECMAScript6を体験
Toshio Ehara
•
1.2K views
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
Yuichi Sakuraba
•
6.5K views
Ibm worklight デモ環境とサンプルコード
K Kimura
•
1.2K views
勉強会force#4 Chatter Integration
Kazuki Nakajima
•
1.4K views
ソーシャルアプリ勉強会(第一回資料)配布用
Yatabe Terumasa
•
1.5K views
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
Yuki Takei
•
21.2K views
XML-RPC : Pythonが「電池付属」と呼ばれる理由
Ransui Iso
•
8.3K views
Advertisement
Recently uploaded
(20)
【DL輪読会】Visual Classification via Description from Large Language Models (ICLR...
Deep Learning JP
•
1.1K views
【DL輪読会】Flow Matching for Generative Modeling
Deep Learning JP
•
681 views
①【威斯康星大学麦迪逊分校毕业证文凭学位证书|工艺完美复刻】
C25lokh12
•
3 views
☀️【麦吉尔大学毕业证成绩单留学生首选】
15sad
•
3 views
20230516 @Mix Leap Hirohiko_Suwa
Masashi Nakagawa
•
82 views
シン3次元表示装置 ーその1ー
Takashi Yamanoue
•
132 views
論文紹介:Temporal Action Segmentation: An Analysis of Modern Techniques
Toru Tamaki
•
54 views
①【汤普森河大学毕业证文凭学位证书|工艺完美复刻】
love445ds
•
2 views
TestSIP (1).pdf
DeependraSingh712859
•
2 views
第2回Matlantis User Conference_20230421_畠山歓先生
Matlantis
•
361 views
GitHub Copilotとともに次の開発体験へ
Kazumi IWANAGA
•
15 views
ペンタエリスリトール市場.pdf
HinaMiyazu
•
3 views
《杨百翰大学毕业证|学位证书校内仿真版本》
d520dasw12
•
2 views
AIEXPO_CDLE名古屋紹介
KotaMiyano
•
0 views
ChatGPT + LlamaIndex 0 .6 による チャットボット の実装
Takanari Tokuwa
•
13 views
①【阳光海岸大学毕业证文凭学位证书|工艺完美复刻】
vgh215w
•
2 views
SoftwareControl.pdf
ssusercd9928
•
6 views
モバイル・クラウド・コンピューティング-データを如何に格納し、組み合わせ、情報として引き出すか
Masahiko Funaki
•
2 views
Kubernetes超入門
Takashi Suzuki
•
4 views
初学者のためのプロンプトエンジニアリング実践.pptx
Akifumi Niida
•
305 views
Inside Frontend 2 #insideFE
1 <AboutMe 2 name="穴井宏幸" 3
handleName="@pirosikick" 4 titles={[ 5 "ヤフー株式会社 第6・7代黒帯(JavaScript)", 6 "リッチラボ株式会社 エンジニア" 7 ]} 8 home="福岡" 9 />
1 <about-me 2 name="穴井宏幸" 3
handle-name="@pirosikick" 4 :titles="[ 5 'ヤフー株式会社 第6・7代黒帯(JavaScript)', 6 'リッチラボ株式会社 エンジニア' 7 ]" 8 home="福岡" 9 >
1 // SomeComponent.spec.js 2
import test from 'ava'; 3 import sinon from 'sinon'; 4 import React from 'react'; 5 import Enzyme, { shallow } from 'enzyme'; 6 import Adapter from 'enzyme-adapter-react-16'; 7 8 import SomeComponent from './SomeComponent'; 9 10 // Reactのバージョンによってアダプタを変える 11 // 本来はavaのrequireで設定したほうがよい 12 Enzyme.configure({ 13 adapter: new Adapter() 14 }); 15 16 test('SomeComponent', t => { 17 // 描画したコンポーネントをラップしたものを返す 18 const wrapper = shallow(<SomeComponent />); 19 20 // ...テストケースを記述する... 21 });
1 // CSSセレクタで探す 2
t.true(wrapper.find('.some-class').exists()); 3 // コンポーネント名で探す 4 t.deepEqual( 5 wrapper.find('OtherComponent').at(0).props(), 6 { no: 1 } 7 ); 8 // 子要素 9 t.true(wrapper.childAt(1).is('OtherComponent')); 10 11 // propsの再設定 12 const onClick = sinon.spy(); 13 wrapper.setProps({ onClick }); 14 15 // イベントの再現 16 wrapper.find('.button').simulate('click'); 17 t.true(onClick.calledOnce);
1 // someComponent.spec.js 2
import test from 'ava'; 3 import { shallow } from '@vue/test-utils'; 4 5 import someComponent from './someComponent.vue'; 6 import otherComponent from './otherComponent.vue'; 7 8 test('someComponent', t => { 9 // 描画したコンポーネントをラップしたものを返す 10 const wrapper = shallow(someComponent, { 11 propsData: {/* props */} 12 }); 13 14 // ...テストケースを記述する... 15 });
1 // CSSセレクタで探す 2
t.true(wrapper.find('.some-class').exists()); 3 // コンポーネントで探す 4 t.deepEqual( 5 wrapper.findAll(otherComponent).at(0).props(), 6 { no: 1 } 7 ); 8 // 子要素 9 // @vut/test-utilsは子要素の取得はできない? 10 11 // コンポーネントが保持している値の更新 12 wrapper.setProps({/* ... */}); 13 wrapper.setData({/* ... */}); 14 15 // イベントの再現 16 wrapper.find('.button').trigger('click'); 17 // コンポーネントが$emit('clicked')したか 18 t.is(wrapper.emitted().clicked.length, 1);
1 // CustomField.spec.js 2
import ... 3 import CustomField from './CustomField'; 4 5 test('render ObjectField', t => { 6 const props = { 7 schema: { 8 type: "array", 9 items: { 10 image: { ... }, 11 link: { ... } 12 } 13 }, 14 formData: [ ... ] 15 }; 16 const wrapper = shallow(<CustomField {...props} />); 17 18 t.true(wrapper.find('ObjectField').exists()); 19 });
1 // CustomField.js 2
import ObjectField from 'react-jsonschema-form/...'; 3 4 export default function CustomField({ 5 schema, 6 formData 7 }) { 8 return <ObjectField />; 9 } 10
1 // アサーションを追加 2
// ObjectFieldに渡すpropsの検証 3 t.deepEqual( 4 wrapper.find('ObjectField').props(), 5 { 6 schema: props.schema.items, 7 formData: props.formData[0] 8 } 9 );
1 // CustomField.js 2
import ObjectField from 'react-jsonschema-form/...'; 3 4 export default function CustomField({ 5 schema, 6 formData 7 }) { 8 return ( 9 <ObjectField 10 schema={schema.items} 11 formData={formData[0]} 12 /> 13 ); 14 }
1 // CustomField.spec.js 2
// テストケースを追加 3 test(`call onChange with new data 4 if ObjectField is changed`, t => { 5 const props = { 6 schema: { ... }, 7 formData: [ ... ], 8 onChange: sinon.spy() 9 }; 10 const wrapper = shallow(<CustomField {...props} />); 11 12 // ObjectField is changed 13 wrapper.find('ObjectField').props().onChange({ ... }) 14 15 // call onChange with new data 16 t.true(props.onChange.calledOnce); 17 t.deepEqual(props.onChange.args[0], [ ... ]); 18 })
1 // CustomField.js 2
import ObjectField from 'react-jsonschema-form/...'; 3 4 export default function CustomField({ 5 schema, 6 formData, 7 onChange 8 }) { 9 return ( 10 <ObjectField 11 schema={schema.items} 12 formData={formData[0]} 13 onChange={data => { 14 onChange([data, ...formData.slice(1)]); 15 }) 16 /> 17 ); 18 }
1 // 実装 2
<Button data-testid="add-btn">追加</Button> 3 <Button data-testid="remove-btn">削除</Button> 4 5 // テスト 6 // セレクタや並び順では変更に弱い 7 // const rmeoveButton = wrapper.find('Button').at(1); 8 // カスタムデータ属性を使う 9 const removeButton 10 = wrapper.find('[data-testid="remove-btn"]'); 11 12 // ヘルパーを作っておくと便利 13 const findByTestId = (wrapper, testid) => 14 wrapper.find(`[data-testid="${testid}"]`);
1 <!-- 2 someComponent.vue 3
- otherComponentはslot(子要素)を受け取れる 4 --> 5 <template> 6 <other-component> 7 <div class="slot-contents"></div> 8 </other-component> 9 </template> 1 // someComponent.spec.js 2 // shallowでは子コンポーネントがスタブされる 3 const wrapper = shallow(someComponent); 4 // slotは描画されないので以下は失敗する 5 t.true(wrapper.find('.slot-contents').exists(); 6 7 // mountならうまくいく 8 const wrapper = mount(someComponent); 9 t.true(wrapper.find('.slot-contents').exists();
1 <!-- someComponent.vue
--> 2 <template> 3 ... 4 <div class="mounted"> 5 {{ isMounted ? 'mounted!' : 'not mounted' }} 6 </div> 7 </template> 8 <script> 9 export default { 10 data () { 11 return { isMounted: false } 12 }, 13 mounted () { 14 // shallowでも呼ばれる 15 this.isMounted = true 16 } 17 } 18 </script>
1 // someComponent.spec.js 2
// mountedは呼ばれるがtemplateは更新されていない 3 // 以下は全て通る 4 t.true(wrapper.vm.isMounted); 5 t.is(wrapper.find('.mounted').text(), 'not mounted'); 6 7 // updateを実行するとtemplateに反映される 8 wrapper.update(); 9 t.is(wrapper.find('.mounted').text(), 'mounted!!');
Advertisement