を持っていない私持っている私のリアクト構成要素の一つで、次の非同期呼び出し:戻り値は `then`プロパティ
onSubmit = (data) => {
this.props.startAddPost(data)
.then(() => {
this.props.history.push('/');
});
};
ここでの目標は、インデックスページにユーザーをリダイレクトすることであるのみポストがReduxで永続化されると(startAddPost
は、Axiosを使用して外部APIにデータを送信する非同期アクションジェネレータであり、新しいポストをReduxストアに保存する別のアクションをディスパッチします。コンポーネント自体でthen
を呼び出します)。それはアプリでうまく動作しますが、私はそれをテストすることに問題があります。
import React from 'react';
import { shallow } from 'enzyme';
import { AddPost } from '../../components/AddPost';
import posts from '../fixtures/posts';
let startAddPost, history, wrapper;
beforeEach(() => {
startAddPost = jest.fn();
history = { push: jest.fn() };
wrapper = shallow(<AddPost startAddPost={startAddPost} history={history} />);
});
test('handles the onSubmit call correctly',() => {
wrapper.find('PostForm').prop('onSubmit')(posts[0]);
expect(startAddPost).toHaveBeenLastCalledWith(posts[0]);
expect(history.push).toHaveBeenLastCalledWith('/');
});
だから私は明らかに渡すために、このテストを必要とするが、それは次のように出力して失敗します。
● handles the onSubmit call correctly
TypeError: Cannot read property 'then' of undefined
at AddPost._this.onSubmit (src/components/AddPost.js:9:37)
at Object.<anonymous> (src/tests/components/AddPost.test.js:25:46)
at process._tickCallback (internal/process/next_tick.js:109:7)
それでは、どのように私はこの問題を解決することができますか?実際のアプリケーションではすべてがうまくいくので、これはテスト自体の問題だと思われます。ありがとうございました!
'startAddPost'は模擬関数であるようです。なぜそれが約束を返すと期待していますか? –