Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 模拟Redux操作中的函数_Javascript_Reactjs_Redux_Jestjs_Redux Thunk - Fatal编程技术网

Javascript 模拟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

我正在为我的redux操作编写测试。在我的一个复杂动作中,我有一个想要模拟的函数,例如,
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/CODE >的最终结果,而中间发生的事情也无关紧要。不测试它是完全可以的,因为它是实现细节,也就是说,它只定义了
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,使用函数内联更新。