Javascript 模拟Redux操作中的函数
我正在为我的redux操作编写测试。在我的一个复杂动作中,我有一个想要模拟的函数,例如,Javascript 模拟Redux操作中的函数,javascript,reactjs,redux,jestjs,redux-thunk,Javascript,Reactjs,Redux,Jestjs,Redux Thunk,我正在为我的redux操作编写测试。在我的一个复杂动作中,我有一个想要模拟的函数,例如,aRandomFunction。如何添加并编写模拟fetchAction内部使用的函数的测试?谢谢您可以看到下面的示例 import configureMockStore from 'redux-mock-store'; import thunk from 'redux-thunk'; jest.mock('../../api/handleError'); jest.mock('../../api/hand
aRandomFunction
。如何添加并编写模拟fetchAction
内部使用的函数的测试?谢谢您可以看到下面的示例
import configureMockStore from 'redux-mock-store';
import thunk from 'redux-thunk';
jest.mock('../../api/handleError');
jest.mock('../../api/handleResponse');
let store;
const middlewares = [thunk];
const mockStore = configureMockStore(middlewares);
beforeEach(() => {
store = mockStore({});
fetchMock.restore();
});
const aRandomAction = () => ({
type: "RANDOM_ACTION",
})
const aRandomFunction = (data, dispatch) => {
if (data.isTrue) {
dispatch(aRandomAction);
}
};
export const fetchAction = () => {
return (dispatch) => {
dispatch(requestAction());
return fetch('sampleApi/foo')
.then(response => handleResponse(response))
.then((json) => {
aRandomFunction(json.data, dispatch);
dispatch(receiveAction(json.data));
})
.catch(error => handleError(error));
};
};
describe('testing the fetch Action', () => {
test('testing the fetch action', () => {
const expectedActions = [
{ type: "REQUEST_ACTION" },
{ type: "RECEIVE_ACTION", data: "payload" },
];
return store.dispatch(fetchAction()).then(() => {
expect(store.getActions()).toEqual(expectedActions);
});
});
});
在这种情况下,不能模拟
aRandomFunction
,因为它没有导出。尽管在中没有明确说明这一点,但请注意,只有可导入的代码才能用Jest进行模拟。你可以专注于测试fetchAction
为实现其目标而使用的方法,这可能会随着时间的推移而改变,并破坏您的测试,即使fetchAction
的目标一直正确实现
但是,如果能够测试aRandomFunction
对您来说很重要,那么您必须将其移动到一个外部文件中,并从那里导出它。这样做之后,您就可以像模拟其他依赖项一样模拟它,例如handleError
和handleResponse
。即使测试用例需要,您也可以这样做,例如:
random-function.js
const aRandomAction=()=>({
类型:“随机行动”,
});
const aRandomFunction=(数据,调度)=>{
if(data.isTrue){
调度(aRandomAction());
}
}
导出默认aRandomFunction;
your-test-case.spec.js(将其与问题示例中的测试用例放在一起)
从“/random function”导入一个随机函数;
开玩笑的模仿(“/随机函数”);
aRandomFunction.mockImplementation((数据,调度)=>{
分派({type:“MOCK_ACTION”);
});
< /代码> 在这种情况下,您不能嘲笑<代码> ARANDOM函数< /代码>,因为它没有被导出。虽然没有明确说明,但是请注意只有可导入的代码可以被嘲弄。您可以专注于测试<代码> FETCHACTION<代码>的最终结果,而中间发生的事情并不重要。测试它是因为它的实现细节,也就是说,它只定义了fetchAction
为实现其目标而使用的方法,这种方法可能会随着时间的推移而改变,并破坏您的测试,即使fetchAction
的目标一直正确实现
但是,如果能够测试aRandomFunction
对您来说很重要,那么您必须将其移动到一个外部文件中,并从那里导出。这样做之后,您就可以像模拟其他依赖项一样模拟它,例如handleError
和HandlerResponse
。即使必要,您也可以请为您的测试用例添加ry,例如:
random-function.js
const aRandomAction=()=>({
类型:“随机行动”,
});
const aRandomFunction=(数据,调度)=>{
if(data.isTrue){
调度(aRandomAction());
}
}
导出默认aRandomFunction;
your-test-case.spec.js(将其与问题示例中的测试用例放在一起)
从“/random function”导入一个随机函数;
开玩笑的模仿(“/随机函数”);
aRandomFunction.mockImplementation((数据,调度)=>{
分派({type:“MOCK_ACTION”);
});
能否举例说明aRandomFunction
来自何处?是否从其他文件导入?@fmoliveira,使用函数内联更新。能否举例说明aRandomFunction
来自何处?是否从其他文件导入?@fmoliveira,使用函数内联更新。