Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.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 模拟存储区内的调度在Jest测试中引发错误_Javascript_Reactjs_Unit Testing_Jestjs_Axios - Fatal编程技术网

Javascript 模拟存储区内的调度在Jest测试中引发错误

Javascript 模拟存储区内的调度在Jest测试中引发错误,javascript,reactjs,unit-testing,jestjs,axios,Javascript,Reactjs,Unit Testing,Jestjs,Axios,在我的React and Redux应用程序中,试图使用Jest&TypeScript运行我的第一个测试,但我无法成功运行测试。为了澄清起见,应用程序本身运行时没有错误&运行良好。看来,我没有正确设置Axios模拟响应。运行Jest测试时,出现以下错误: 操作不能有未定义的“类型”属性。你拼错了吗 常数 操作创建者: export const fetchBoats = ( userAuthToken: string, filterValues: BoatSearchFilterParam

在我的React and Redux应用程序中,试图使用Jest&TypeScript运行我的第一个测试,但我无法成功运行测试。为了澄清起见,应用程序本身运行时没有错误&运行良好。看来,我没有正确设置Axios模拟响应。运行Jest测试时,出现以下错误:

操作不能有未定义的“类型”属性。你拼错了吗 常数

操作创建者:

export const fetchBoats = (
  userAuthToken: string,
  filterValues: BoatSearchFilterParams = {},
  page: number = 1
) => (dispatch: any) => {
  const filterParams: string = setFilterParamsAsString(filterValues);
  const url = `${GET_BOATS}?${filterParams}&page=${page}`;
  return dispatch({
    types: [FETCH_REQUEST, FETCH_SUCCESS, FETCH_FAILURE],
    promise: axios({
      method: "get",
      url: url,
      headers: {
        Authorization: `Token ${userAuthToken}`
      }
    })
  });
};
我的测试文件在当前状态下(没有断言)为:

import configureStore from "redux-mock-store";
import thunk from "redux-thunk";
import { fetchResults } from "./boats";
import axios from "axios";
const mockedAxios = axios as jest.Mocked<typeof axios>;

const mockStore = configureStore([thunk]);
const store = mockStore();
jest.mock("axios");

const respObj = {
  results : ["a", "b", "c", "d"]
};

describe("Test the 'Boats' action", () => {
  beforeEach(() => {
    store.clearActions();
  });

  it("should have data structure matching the expected structure", () => {
    const respObj = { data: resp };
    mockedAxios.get.mockResolvedValue(respObj);
    const ac: any = store.dispatch(fetchBoats("abcabcabc"));
//    expect(ac).toContain(); commented out.
  });
});
从“redux模拟存储”导入configureStore;
从“redux thunk”导入thunk;
从“/boats”导入{fetchResults}”;
从“axios”导入axios;
const mockedAxios=axios作为玩笑。Mocked;
const mockStore=configureStore([thunk]);
常量存储=mockStore();
开玩笑的模仿(“axios”);
常数respObj={
结果:[“a”、“b”、“c”、“d”]
};
描述(“测试‘船只’动作”,()=>{
在每个之前(()=>{
store.clearActions();
});
它(“应具有与预期结构匹配的数据结构”,()=>{
const respObj={data:resp};
mockedAxios.get.mockResolvedValue(respObj);
const ac:any=存储调度(fetchboots(“abcabc”);
//expect(ac).toContain();已注释掉。
});
});
如何让动作创建者返回
respObj
响应,然后对其进行断言

编辑:


关于action creator的工作方式似乎有些混乱。我有一个自定义中间件,它截取一个签名为上面这个动作创建者的动作。此操作有效且运行良好:)

您的“操作创建者”是否真的有效?是的,有效。你为什么这么问?免责声明:我确实为本例重命名了一些变量,以使它们更易于操作。您提供的代码缺少一些redux中间件,可能,请提供一个最小的完整可复制代码。这是关键信息。@slideshowp2我刚刚重新插入了以前添加的注释。该应用程序本身运行良好,为redux中间件和redux连接添加整个代码将极大地迷惑读者。问题是如何让Jest成功地监视ajax请求并截获它们并返回我的模板响应,如上所述。您的“Action creator”实际工作吗?是的,它工作。你为什么这么问?免责声明:我确实为本例重命名了一些变量,以使它们更易于操作。您提供的代码缺少一些redux中间件,可能,请提供一个最小的完整可复制代码。这是关键信息。@slideshowp2我刚刚重新插入了以前添加的注释。该应用程序本身运行良好,为redux中间件和redux连接添加整个代码将极大地迷惑读者。问题是如何让Jest成功地监视ajax请求并拦截它们并返回我的样板响应,如上所述。