identify element

1.新建Home.js

檔案位於 root/app/Home.js

import React, { Component } from 'react';
import { StyleSheet, View, TextInput } from 'react-native';

export default class Home extends Component {

  render() {
    return (
      <View style={styles.wrapper}>
        <TextInput
          testID={'username'}
          style={{backgroundColor: 'gray', marginBottom: 35}} 
          placeholder={'Enter User Name'} />
        
        <TextInput
          testID={'password'}
          style={{backgroundColor: 'gray'}} 
          placeholder={'Enter Password'} />
      </View>
    )
  }
}

const styles = StyleSheet.create({
  wrapper: {
    flex:1, 
    justifyContent: 'center'
  },
})

2.撰寫test case

1) 新建 root/__tests__/HomeIdentifyElement-test.js render Home組件後 toJSON,並且使用console.log印出內容,這樣我們才知道怎麼找到我們要的元件

import 'react-native';
import React from 'react';
import renderer from 'react-test-renderer';
import Home from '../app/Home.js';

it('Identify Element in Home.js', ()=>{
    let tree = renderer.create(<Home />).toJSON();
    console.log(tree);
});

2) 執行此test 可看到印出來的json,如下圖紅框內

3) 其中children就是我們所需要的,所以把 console.log(tree) 改為 console.log(tree.children) 執行test後如下圖

​ 4) 寫個 function(findElement) 去抓是否有指定的 testID 存在,HomeIdentifyEelement-test.js 完整如下

import 'react-native';
import React from 'react';
import renderer from 'react-test-renderer';
import Home from '../app/Home.js';


let findElement = function(tree, element){
  for(node in tree.children){
      if(tree.children[node].props.testID == element)
        return true;
  }
  return undifined;
};

it('Identify Element in Home.js', ()=>{
    let tree = renderer.create(<Home />).toJSON();
    // console.log(tree.children);
    
    expect(findElement(tree, 'username')).toBeDefined();
});

5)再次執行test,因為 'username'是存在的,所以會成功 可以自行嘗試修改 testID 的部分

參考

Last updated