Javascript 如何测试try/catch内部使用效果?

Javascript 如何测试try/catch内部使用效果?,javascript,reactjs,jestjs,Javascript,Reactjs,Jestjs,所以我有这个 useEffect(() => { try { if (prop1 && prop2) { callThisFunction() } else { callThatFunction() } } catch (error) { console.log(error,

所以我有这个

    useEffect(() => {
        try {
            if (prop1 && prop2) {
                callThisFunction()
            } else {
                callThatFunction()
            }
        } catch (error) {
            console.log(error, 'the err:')
            setError(true)
        }
    }, [])
我想进入catch块来断言一些东西,我该怎么做

目前,我已经尝试模拟一个
调用this/That
函数的实现,并抛出一个错误以使其进入catch,但没有成功

更新:还尝试了以下操作:

callThisFunction.mockImplementation(() => {
   throw Error(error)
})
我已经说得很清楚了,它跳到了另一个球上,但由于某种原因,当另一个球失败时,它不会跳到接球上。但代码是有效的。我也不能参加考试:/


有什么想法吗?

您可以使用异步函数:

useEffect(() => {
    (async function() {
        try {
            if (prop1 && prop2) {
                callThisFunction()
            } else {
                callThatFunction()
            }
        } catch (error) {
            console.log(error, 'the err:')
            setError(true)
       }
    })();
}, [])
你可以这样做:

export default function Example() {
        const [error, setError] = useState(false)
        async function asyncFetchAPI() {
            let response = null;
            try {
                response = await fetch('api/...')
                setError(false)
                const { prop1, prop2 } = response.data;
                if (prop1 && prop2) {
                    callThisFunction()
                } else {
                    callThatFunction()
                }
            } catch (error) {
                console.error('The err: ', error)
                setError(true)
            }
        }

        useEffect(() => {
            asyncFetchAPI();
        }, []);

        return <div></div>
    }
导出默认函数示例(){
const[error,setError]=useState(false)
异步函数asyncFetchAPI(){
让响应=null;
试一试{
响应=等待获取('api/…'))
设置错误(错误)
const{prop1,prop2}=response.data;
如果(项目1和项目2){
callThisFunction()
}否则{
调用该函数()
}
}捕获(错误){
console.error('错误:',error)
设置错误(真)
}
}
useffect(()=>{
asyncFetchAPI();
}, []);
返回
}

@skyboyer补充道,这就是你的意思吗?@skyboyer甚至看起来都不像useffect被调用:/@skyboyer不确定你是否理解。我正试图跳进接球区。所以道具不会有什么不同,它们只会跳进其他块中…你如何测试?碰巧是酶的
浅()?它们(具体地说,React的
Shallowrender
)仍然不支持运行
useEffect
。刚刚尝试了使用
useffect
和enzyme/
mount()。同时添加测试代码。是的,你是对的,我首先误解了你的问题,但现在,我相信,我明白了。仍然没有人打电话:/