javascript - 如何在 jest/enzyme 测试中测试 axios get 请求函数?

标签 javascript reactjs jestjs enzyme

我有跟随 React 组件,它在父组件中作为子组件呈现并传递 props:

<Component 
    localStorageValue={'test-walue'} 
    requestDataFunc={getData}
    requestUserData={getUserData} 
    expectedResponseKey={'key'} 
    dataType={'test}
    activePage={'index'} 
    saveData={this.setData} 
/>

所以 requestDataFunc 是一个传递给组件并在 componentDidMount 中运行的函数:

componentDidMount() {
  requestDataFunc().then(({ data }) => {
      const { selectedDataItems } = this.state;
      const expectedResponseData = data[expectedResponseKey];
      let interimDataArr = [];
      expectedResponseData.forEach((item) => {
        interimDataArr = [...interimDataArr, {
          ...item,
          active: selectedDataItems.length ? selectedDataItems.some((selectedItemId) => selectedItemId === item.id) : false,
        }];
      });
}

但是当我运行测试时,我得到:

TypeError: 无法读取未定义的属性 'then'

requestDataFunc().then(({ data }) => {
    const { selectedDataItems } = this.state;
    const expectedResponseData = data[expectedResponseKey];
    let interimDataArr = [];

我刚开始测试渲染组件:

describe('correct component render', () => {
  const defaultProps = {
    localStorageValue: 'test-walue',
    requestDataFunc: jest.fn(),
    requestUserData: jest.fn(),
    expectedResponseKey: 'key',
    dataType: 'test',
    activePage: 'index',
    saveData: jest.fn(),
  };

  const wrapper = shallow(<ComponentName { ...defaultProps } />);

  test("render component", () => {
    expect(wrapper.length).toEqual(1);
  });


});

我想我需要以某种方式模拟该请求应该接收的请求和数据。如何正确执行此操作?

最佳答案

你试过如下模拟promise吗:

var mockPromise = new Promise((resolve, reject) => {
    resolve(<mock response similar to actual promise response>);
});
describe('correct component render', () => {
      const defaultProps = {
        localStorageValue: 'test-walue',
        requestDataFunc: jest.fn().mockReturnValueOnce(mockPromise),
        requestUserData: jest.fn(),
        expectedResponseKey: 'key',
        dataType: 'test',
        activePage: 'index',
        saveData: jest.fn(),
      };

      const wrapper = shallow(<ComponentName { ...defaultProps } />);

      test("render component", () => {
        expect(wrapper.length).toEqual(1);
      });
});

关于javascript - 如何在 jest/enzyme 测试中测试 axios get 请求函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55968785/

相关文章:

javascript - 如何在 JQuery 自动完成中设置和获取 ID

reactjs - 使用Nginx部署React加载资源失败

javascript - 在 ReactJS 中使用单独的方法填充渲染方法

javascript - MobX - 当我可以使用 `observer` 将数据注入(inject) React 组件时,为什么我应该使用 `inject`

javascript - Jest.mock 中的 ES6 导入和 'is not a constructor'

react-native - 运行测试文件时出现错误 Cannot read property 'getRandomBase64' of undefined

javascript - Ember 问题: Uncaught Error: Could not find module handlebars

javascript - 为什么 Javascript Ajax 调用在 IOS 5 以外的 IOS 设备上通过 SSL 失败。

javascript - 使用 Jest Enzyme 测试 React Reducer

javascript - Express Handlebars 通配符