我该如何嘲笑reactjs中的承诺?

我该如何嘲笑reactjs中的承诺?,reactjs,jestjs,Reactjs,Jestjs,我想写一个测试,模仿reactjs中的承诺 我只需要getHeaders()的模拟实现来返回字符串 export const loadAllProjects = () => { return (dispatch) => { getHeaders() .then(headers => { ...do stuff }) } } 为了澄清我最初的职能是 export co

我想写一个测试,模仿reactjs中的承诺

我只需要getHeaders()的模拟实现来返回字符串

export const loadAllProjects = () => {
    return (dispatch) => {
        getHeaders()
            .then(headers => {
                ...do stuff
            })
    }
}
为了澄清我最初的职能是

export const loadAllProjects = () => {
    return (dispatch) => {
                ...do stuff
    }
}
…我的测试是

    it('should create SET_ALL_PROJECTS action when fetching projects', () => {
    fetchMock
        .getOnce('http://test.projects.api/api/projects',
        {
            body: [{name: "x"}],
            headers: { 'content-type': 'application/json' }
        }).spy()
    const expectedActions = [
        { type: "SET_ALL_PROJECTS", json: [{name:"x"}] },
    ]
    checkAsyncActionsWereDispatched(expectedActions, actions.loadAllProjects)
});

我希望测试能够与模拟头一起工作

使用
Promise.resolve

const getHeaders = () => {
    return new Promise((resolve, reject) => {
        resolve("some string");
    });
};

a = await getHeaders();    //some string
return Promise.resolve("your headers here");
您可以使用来模拟测试承诺

最终完成的示例:

const mockPostSpy = jest
.spyOn(axios, 'post')
.mockImplementation(() => {
    return new Promise((resolve) => {
        return resolve({
            data: {},
        });
    });
});
操作失败的示例:

const mockPostSpy = jest
.spyOn(axios, 'post')
.mockImplementation(() => {
    return new Promise((resolve) => {
        return reject({});
    });
});

祝你好运^ ^

谢谢你的回复。我已经编辑了这个问题来展示我的原始测试谢谢-我已经编辑了这个问题来展示原始测试你是怎么模仿fetch的?您有一个名为
fetchMock
的东西,是从库中获取的吗?是的,Henrik,它是从获取模拟库中获取的。虽然我不认为我能对您的问题有多大帮助,但我发现使用获取和获取模拟会带来更多的麻烦。模拟需要在需要
checkAsyncActionsWereDispatched
功能之前进行,也可能需要使用
require
而不是
import
语法。fetch和fetch mock的问题太多了,所以我选择了axios和普通的玩笑式模拟(getHeaders是否来自另一个模块?如果不是,则目前无法使用jest进行模拟。getHeaders与loadAllProjects()和Andreas位于同一个文件中。它还进行提取,这就是我要模拟它的原因。我可以将它放在另一个模块中。。。