0
componentWillReceivePropsメソッドをテストし、現在のWebページのパスを確認します。メソッドをテストするために次のコードを使用しようとしましたが、常にエラーが発生します。反応コンポーネントのcomponentWillReceivePropsメソッドをテストする方法
Invariant Violation: A <Router> may have only one child element
私はこのエラーを解決するために何をすべきでしょうか?これまで私が試したことがあります。
class WrappedComponent extends React.Component {
componentWillReceiveProps(nextProps) {
if (!nextProps.user_id) {
this.props.history.replace('/login');
}
}
render() {
return <div>WrappedComponent</div>
}
}
describe('AuthenticationHOC',() => {
describe('authenticationRequired',() => {
let props;
const shallowWrapper =() => {
return shallow(
<MemoryRouter>
withRouter(authenticationRequired(<WrappedComponent {...props} />))
</MemoryRouter>
)
}
it('renders the wrapped component',() => {
let wrapper = shallowWrapper()
expect(wrapper.contains(<WrappedComponent {...props} />)).toBe(true)
})
describe("when user_id doesn't exist",() => {
beforeEach(() => {
props = {
user_id: ''
}
});
it('should go to the login page',() => {
//how to test the method componentWillReceiveProps
let wrapper = shallowWrapper().dive();
wrapper.setProps({
user_id: '12312412'
});
// expect(spy.calledOnce).toBe(true);
expect(window.href).toBe("/login");
})
})
describe("when user_id do exist",() => {
beforeEach(() => {
props = {
user_id: 'something'
}
});
it('should not go to other page',() => {
let wrapper = shallowWrapper();
expect(window.href).toBe("/");
})
})
})
ありがとうございました。あなたのソリューションを試したときにエラーが発生しました。私はいつもエラーを受け取ります。不変違反:には子要素が1つしかない可能性があります 私の更新されたコードを見て、このテストを解決できますか? –
Darren
divに 'withRouter'をラップしてみてください。また、 'authenticationRequired'がただ一つの子を返すことを確認してください –
ええ、今、エラーは解決されました。しかし、それはwindow.hrefの値は常に未定義であると思われます.... – Darren