首页 > 解决方案 > 无法使用 jest 进行手动模拟工作

问题描述

我正在尝试进行手动模拟,但它不起作用。我的测试文件 Comp.test.tsx 正在测试一个组件 Comp.tsx 。我的 Comp.tsx 具有从另一个文件 Comp.action.ts(名为导出)导入的操作。我在 mount 时调用从 Comp.action.ts 导出的 abc() 方法,该方法返回 API 数据。

现在,我正在尝试模拟 Comp.action.ts 中的所有函数,以便可以使用虚拟数据进行测试。我创建__mocks__了与 Comp.action.ts 相同级别的文件夹,并将文件 Comp.action.ts 放入其中。但是测试不会进入我的模拟文件,而是进入实际文件以获取数据。我曾多次尝试找出问题,但没有运气。我在这里做错了什么?

Comp.tsx

import {abc} from '../../Comp.action.ts'

// on didmount
abc() // it calls the api and stores the result in redux store

Comp.action.ts

export const abc = () => {
    console.log('actual')
    return (dispatch:Dispatch<any>) => {
        dispatch({type: LOADING});
        networkCall("get", `/channels`, url)
        .then((res:any)=>{
            if(res.error && isEmpty(res.error)){
                dispatch({ type: SUCCESS, payload: {res: res}});
            }else{
                dispatch({ type: FAILED, payload: {error: res}});
            }
        }).catch((error)=>{
            if(error?.response?.data){
                dispatch({ type: FAILED, payload: {error: error.response.data}});
            }
        });
    }
}

__mocks__/Comp.action.ts

jest.mock('../Comp.action.ts)

export const abc = () => {
    console.log('mocked')

//  return some dummy data
    return data
}

最后是我的测试文件 Comp.test.tsx

test('it should display whatsapp plans text', () => {
    const component = mount(
            <Comp />
    )
})

我的理解是它应该从在 didmount 上调用 abc() 时获取虚拟数据,__mocks__/Comp.action.ts但事实并非如此。我如何实现这一目标?

标签: reactjsjestjscreate-react-appenzyme

解决方案


推荐阅读