如何在 reactjs 中模拟承诺?



我想写一个测试来模拟 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)
});

我希望测试与模拟标头一起使用

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

使用Promise.resolve

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({});
});
});

祝你好运^^

最新更新