2017-05-21 23 views
0

在我的組件我有...spyOn失敗,即使間諜被稱爲

onSubmit = (e) => { 
    e.preventDefault(); 
    const { history, versionStore } = this.props; 
    versionStore.add(this.state.formData) 
    .then(() => history.push('/')); 
} 

在我的測試...

it('after successfully submit should redirect to/page',() => { 
    const spy = jest.spyOn(minProps.history, 'push') 
    .mockImplementation((path) => { 
     console.log('called with ', path); // IS CALLED! 
    }); 

    const wrapper = shallow(<Add.wrappedComponent {...minProps} />); 

    fetchMock.postOnce('/api/version', { name: 'v1' }); 
    wrapper.setState({ formData: { name: 'v1' } }); 

    wrapper.find('form').simulate('submit', { preventDefault: jest.fn() }); 

    expect(spy).toHaveBeenCalledWith('/'); 

    spy.mockReset(); 
    spy.mockRestore(); 
}); 

測試失敗,

稱爲與/
expect(jest.fn()).HandBeenCalledWith(expected)

預期的模擬函數被稱爲:[「/」]
但它沒有被調用。

回答

0

您的重定向位於異步代碼中,並且您正在以同步方式對其進行測試,這意味着測試在執行承諾時尚未解析。我會在2方式之一

1解決這個 - 測試您提交功能W/O的情況下,那麼你可以返回的承諾和測試重定向後的諾言鏈成功

2 - 模擬versionStore。添加到同步和immidattly執行它的功能。

相關問題