酵素の初心者はここにあります。 Reactコンポーネントの状態が、そのコンポーネントのメソッドを呼び出した後に更新されているかどうかをテストしようとしています。状態を更新するコンポーネントメソッドを呼び出した後の反応状態をテストする方法 - 酵素を使用して
これは私がテストしていコンポーネントの抜粋である:以下
class App extends React.Component {
constructor(props) {
super(props);
}
state = {
recipes: {},
user: null
};
handleUnauth =() => {
this.setState({
user: null
});
};
render() {
//render children, pass down methods as props etc...
}
}
するテストです:
import createRouterContext from 'react-router-test-context';
import { shallow, mount } from 'enzyme';
import expect from 'expect';
import React from 'react';
import App from 'App'; //import with webpack alias
describe('App',() => {
let wrapper, context;
beforeEach(() => {
context = createRouterContext();
wrapper = mount(<App/>, { context });
});
it('should remove logged in user details on logout',() => {
const user = {
uid: 'abc123',
name: 'John Doe'
};
wrapper.setState({ user },() => {
wrapper.instance().handleUnauth();
const userState = wrapper.state('user');
expect(userState).toEqual(null);
});
});
});
私のテストは、次のエラーで失敗します。
私は状態の更新がシンクロではないことを理解しますしかし、これに何か関係があるのか、酵素を使ってこれをテストするより良い方法があるのかどうかはわかりません。誰かが私を正しい方向に向けることができれば、とても感謝していますか?ああ、私はwrapper.instance().handleUnauth()
を呼び出した直後にwrapper.update()
と呼んでこれを試しましたが、これもうまくいきませんでした。 React#setState
から
のコールバックパラメータで更新された状態を読む)状態( 'ユーザー' ) '? –
@OrBは 'wrapper.update()。state( 'user')'でそれを試しました。うまくいきませんでした。アプリケーションはうまくいきます - Reval DevToolsで検査してもテストではうまくいかない場合、ログアウト時にユーザー値がnullに設定されていることがわかります。 – Larrydx
@Larrydx答えを確認してください。 –