2017-09-07 3 views
2

경고 메서드가 호출되고 있음을 테스트하기 위해 경고를 조롱 할 수는 있지만 실제로 테스트하려면 경고 내의 확인 단추를 누르는 것이 좋습니다.알리미에서 '온 프레스'를 어떻게 조롱 하시겠습니까?

import { Alert } from 'react-native'; 

it('Mocking Alert',() => { 
    jest.mock('Alert',() => { 
     return { 
      alert: jest.fn() 
      } 
     }; 
     }); 

    const spy = jest.spyOn(Alert, 'alert'); 
    const wrapper = shallow(<Search />); 

    wrapper.findWhere(n => n.props().title == 'Submit').simulate('Press'); 
    expect(spy).toHaveBeenCalled(); //passes 
}) 

저는 어떻게 테스트 할 지 확신이 없습니다. 다음은 테스트하려는 항목과 함께 일반적인 구성 요소입니다.

export default class Search extends Component{ 

    state = { 
     someState: false 
    } 

    confirmSubmit(){ 
     this.setState(state => ({someState: !state.someState})) 
    } 

    onPress =() => { 
     Alert.alert(
     'Confirm', 
     'Are you sure?' 
     [{text: 'Ok', onPress: this.confirmSubmit}] //<-- want to test this 
    ) 
    } 

    render(){ 
     return(
     <View> 
     <Button title='Submit' onPress={this.onPress} 
     </View> 
    ) 
    } 
} 

누구도 이것을 시도한 적이 있습니까?

답변

2

모듈을 조롱하고 스파이 테스트를 위해 가져옵니다. 그런 다음 클릭 이벤트를 트리거하십시오. 이것은 스파이를 호출합니다. 스파이에서 mock.calls을 사용하여 호출 된 매개 변수를 가져와 onPress 메서드를 가져 와서 호출 할 수 있습니다. 그런 다음 구성 요소의 상태를 테스트 할 수 있습니다.

import Alert from 'Alert' 

jest.mock('Alert',() = > { 
    return { 
     alert: jest.fn() 
    } 
    }; 
}); 


it('Mocking Alert',() => { 
    const wrapper = shallow(<Search />); 
    wrapper.findWhere(n => n.props().title == 'Submit').simulate('Press'); 
    expect(Alert.alert).toHaveBeenCalled(); //passes 
    Alert.alert.mock.calls[0][2][0].onPress() //trigger the function within the array 
    expect(wrapper.state('someState')).toBe(true) 
}) 
+0

죄송합니다. 제 질문에 포함시켜야합니다. 그것은 본질적으로 제가 이미하고있는 것입니다. 테스트에서 Alert를 가져 왔습니다. 가 무엇을 테스트 할 것은 경고 방법 '경계 태세 ( '확인', 는 '? 확인을 있습니까' 내 onPress에있다 [{텍스트 : '확인', onPress에 : this.confirmSubmit}]// <- - 이것을 시험해보고 싶습니다. )' –

+1

귀하의 실제적인 질문을 반영하도록 답변을 업데이트했습니다. –