gpt4 book ai didi

reactjs - 如何测试componentDidUpdate()?

转载 作者:行者123 更新时间:2023-12-03 13:07:17 25 4
gpt4 key购买 nike

这是一个示例实现:

export class Person extends Component {
componentDidMount() {
const { onLoadProfile, onLoadPolicy, person } = this.props
onLoadProfile(person.profile.uri)
onLoadPolicy(person.policy.uri)
}

componentDidUpdate(prevProps) {
const { onLoadProfile, onLoadPolicy, person } = this.props
const prevPerson = prevProps.person.uri
const curPerson = person.uri

// If person has changed, update Person component
if (prevPerson !== curPerson) {
onLoadProfile(person.profile.uri)
onLoadPolicy(person.policy.uri)
}
}
}

componentDidMount() 上,我成功地测试了它,如下所示:

describe('<Person />', () => {
let props
let mountedPerson
const mockLoadProfile = jest.fn()
const mockLoadPolicy = jest.fn()

const person = () => {
if (!mountedPerson) {
mountedPerson = mount(<Person {...props} />)
}
return mountedPerson
}

beforeEach(() => {
props = {
onLoadProfile = mockLoadProfile,
onLoadPolicy = mockLoadPolicy
}
mountedPerson = undefined
})

afterEach(() => {
mockLoadProfile.mockClear()
mockLoadPolicy.mockClear()
})

describe('componentDidMount', () => {
it('loads profile', () => {
person().instance().componentDidMount()
expect(mockLoadProfile).toBeCalled()
})

it('loads policy', () => {
person().instance().componentDidMount()
expect(mockLoadPolicy).toBeCalled()
})
})
})

componentDidUpdate() 上,我需要组件尝试 render() 两次,以验证它是否在应该更新的时候更新,反之亦然,但我找不到合适的方法来做到这一点。

在 React 中测试 componentDidUpdate() 方法的正确方法是什么?

PS:我使用的是jestenzymeReact 15

最佳答案

我正在使用不同的方法,但你可以复制这个想法。您需要更改 Prop ,我使用了 setProps() 函数:

describe('componentDidUpdate', () => {
it('loads profile', () => {
const wrapper = shallow(<Person {...props} />) as any;
wrapper.setProps({ person: { uri: "something_different" } });
expect(wrapper.instance().props.onLoadProfile).toBeCalled();
})
})

运行测试后,我可以看到覆盖率测试页面中的粉红色在 componentDidUpdate 中消失了

关于reactjs - 如何测试componentDidUpdate()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52931763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com