2017-03-02 68 views
0

我有一個async componentDidMount如何測試React Native中的異步ComponentDidMount?

export class SplashContainer extends Component { 

    async componentDidMount() { 
    let token = await AsyncStorage.getItem('@XXX:token') 
    if (token !== null) { 
     await this.props.setTokenAvalability(true) 
     await this.props.getUserDetails() 
    } 
    await this.props.navToNextScreen() 
    } 

    render() { 
    return <Splash /> 
    } 
} 

function mapDispatchToProps(dispatch) { 
    return { 
    navToNextScreen:() => dispatch(navToNextScreen(...)), 
    setTokenAvalability: (status) => dispatch(setTokenAvalability(status)), 
    getUserDetails:() => dispatch(getUserDetails()), 
    } 
} 
export default connect(null, mapDispatchToProps)(SplashContainer); 

一個SplashContainer我有兩個問題在這裏。

。我想測試setTokenAvalability and getUserDetails已被調度或不調度。我知道如何測試是否沒有異步/等待,如下所示。

it('test SplashContainer',() => { 
    const store = mockStore({}); 
    const props = { 
    dispatch: store.dispatch 
    } 
    const tree = renderer.create(
    <SplashContainer {...props}/> 
).toJSON(); 
    const expectedAction = [ 
    ... 
    ] 
    expect(store.getActions()).toEqual(expectedAction); 
}); 

。如何存根價值AsyncStorage.getItem()

感謝,

回答

0

嘛,componentDidMount不是一個異步功能,您可以在這裏做,我認爲是使用componentDidUpdate方法,這將給你你的組件的更新的唯一的事情。

讀取this.props.navToNextScreen()函數,我想你誤解了redux在這裏的工作原理。

您可能不需要等待navToNextScreen功能,它應該只發送一個全局事件,並且您的主要組件應該聽取您商店中的更改以顯示/隱藏您的Splash屏幕

相關問題