function and state testing
1.新建組件(Component)
新建 root/app/Home.js
import React, { Component } from 'react';
import { StyleSheet, View, Text } from 'react-native';
export default class Home extends Component {
constructor() {
super();
this.state = {
data: 'test',
};
}
changeState(s) {
this.setState({data: s});
}
doubleInput(x) {
return x * 5;
}
render() {
return (
<View style={styles.wrapper}>
<Text style={styles.text}>Home Component</Text>
</View>
)
}
}
const styles = StyleSheet.create({
wrapper: {
flex:1,
alignItems: 'center',
justifyContent: 'center'
},
text: {
fontSize: 14,
}
})
2.撰寫test case
__tests__/HomeFunState-test.js
import 'react-native';
import React from 'react';
import Home from '../app/Home';
import renderer from 'react-test-renderer';
it('function and state test case in Home.js', ()=>{
let HomeData = renderer.create(<Home />).getInstance();
expect(HomeData.doubleInput(2)).toEqual(10);
})
3.執行HomeFunState-test.js 此頁 test
$ yarn test HomeFunState-test.js
test成功,如下圖

ps.故意將toEqual(10)修改成toEqual(5),造成test失敗,會如下圖

4.state test case
import 'react-native';
import React from 'react';
import Home from '../app/Home';
import renderer from 'react-test-renderer';
it('function and state test case in Home.js', ()=>{
let HomeData = renderer.create(<Home />).getInstance();
// console.log(HomeData);
expect(HomeData.doubleInput(2)).toEqual(10);
expect(HomeData.state.data).toEqual('test');
HomeData.changeState('change');
expect(HomeData.state.data).toEqual('change');
})
console.log 查看內容
HomeFunState-test.js 內加入 console.log(HomeData);
import 'react-native';
import React from 'react';
import Home from '../app/Home';
import renderer from 'react-test-renderer';
it('function and state test case in Home.js', ()=>{
let HomeData = renderer.create(<Home />).getInstance();
console.log(HomeData);
})
執行 test 透過console.log打印,可查看HomeData的所有內容

參考
Last updated