无法读取未定义的 属性 'displayName'。 React+Jest+酶
Cannot read property 'displayName' of undefined. React+Jest+Enzyme
我正在渲染一个使用 useEffect
钩子的反应组件 App.tsx
。在 useEffect
内部,它进行异步调用更新 App.tsx
中定义的状态 delivery
。第一次渲染时,delivery
未定义,但在下次重新渲染后,它被定义了。
const App = () => {
const [delivery, setDelivery] = useState(null)
const [loading, setLoading] = useState(true)
useEffect(() => {
setup()
}, [])
const setup = async () => {
try {
const response = await someAsyncCall()
setDelivery(response)
setLoading(true)
/// Other functionality
} catch (err) {
console.log(err)
}finally{
setLoading(false)
}
}
return (
<>
{loading? <div>Loading!!</div>
: <div>App has loaded with {delivery.displayName} {delivery.id}</div>
}
</>
)
}
如何编写单元测试以使其以正确的值重新呈现?现在我得到 Uncaught [TypeError: Cannot read property 'displayName' of undefined]
我写的单元测试:
describe('test', ()=>{
it("mounts", ()=>{
const wrapper = mount(<App />)
})
})
关于如何重新渲染有什么想法吗?我看了wrapper.update()
可以用。我想知道怎么做?
这不应该解决问题吗?
return (
<>
{loading || !delivery ? <div>Loading!!</div>
: <div>App has loaded with {delivery.displayName} {delivery.id}</div>
}
</>
)
我正在渲染一个使用 useEffect
钩子的反应组件 App.tsx
。在 useEffect
内部,它进行异步调用更新 App.tsx
中定义的状态 delivery
。第一次渲染时,delivery
未定义,但在下次重新渲染后,它被定义了。
const App = () => {
const [delivery, setDelivery] = useState(null)
const [loading, setLoading] = useState(true)
useEffect(() => {
setup()
}, [])
const setup = async () => {
try {
const response = await someAsyncCall()
setDelivery(response)
setLoading(true)
/// Other functionality
} catch (err) {
console.log(err)
}finally{
setLoading(false)
}
}
return (
<>
{loading? <div>Loading!!</div>
: <div>App has loaded with {delivery.displayName} {delivery.id}</div>
}
</>
)
}
如何编写单元测试以使其以正确的值重新呈现?现在我得到 Uncaught [TypeError: Cannot read property 'displayName' of undefined]
我写的单元测试:
describe('test', ()=>{
it("mounts", ()=>{
const wrapper = mount(<App />)
})
})
关于如何重新渲染有什么想法吗?我看了wrapper.update()
可以用。我想知道怎么做?
这不应该解决问题吗?
return (
<>
{loading || !delivery ? <div>Loading!!</div>
: <div>App has loaded with {delivery.displayName} {delivery.id}</div>
}
</>
)