我有一个使用新的getDerivedStateFromProps
生命周期的简单代码:
static getDerivedStateFromProps(nextProps: Props, prevState: State) {
if (nextProps.value !== prevState.value) {
console.log('hello');
return {
value: nextProps.value
};
}
return null;
}
这是测试:
it('should call getDerivedStateFromProps', () => {
const instance = shallow(mockComponent());
instance.setProps({ value: 'test2' });
expect(instance.state.value).toEqual('test2');
});
但是我有这个错误,但是我知道由于console.log()正在调用。
Expected value to equal:
"test2"
Received:
undefined
如何正确测试
getDerivedStateFromProps
?我正在使用:
react: 16.4
react-Dom: 16.4
enzyme-adapter-react-16: 1.1.1
react-test-renderer: 16.4.1
最佳答案
这是一个没有依赖性的静态函数。我认为您可以像其他所有功能一样单独进行测试:
const givenProps = {...};
const givenState = {...};
const result = MyComponent.getDerivedStateFromProps(givenProps, givenState);
expect(result).toEqual({
...
})
我认为这是一种有效的方法,因为
getDerivedStateFromProps
不应包含任何副作用,并且应该是纯净的-这意味着-给定相同的输入,它将产生相同的输出。而且由于组件实例与此处无关,因此创建一个实例只会对内部产生反应,因此不会进行任何测试。这也将与您测试redux reducer的方式类似。