我该如何嘲笑reactjs中的承诺?
我想写一个测试,模仿reactjs中的承诺 我只需要getHeaders()的模拟实现来返回字符串我该如何嘲笑reactjs中的承诺?,reactjs,jestjs,Reactjs,Jestjs,我想写一个测试,模仿reactjs中的承诺 我只需要getHeaders()的模拟实现来返回字符串 export const loadAllProjects = () => { return (dispatch) => { getHeaders() .then(headers => { ...do stuff }) } } 为了澄清我最初的职能是 export co
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位于同一个文件中。它还进行提取,这就是我要模拟它的原因。我可以将它放在另一个模块中。。。