Jest.js 嘲笑axios调用在开玩笑不断被抓在赶上

gmol1639  于 2023-09-28  发布在  Jest
关注(0)|答案(1)|浏览(117)

在加载时,组件中的useEffect调用axios.get来检索它在页面上显示的用户数据。
我试图在开玩笑地复制这种行为,但我一直陷入困境,数据键显示为未定义。
下面是我正在测试的组件的useEffect:

useEffect(() => {
    axios({
      url: `/user/fav_numbers`,
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
        Accept: 'application/json',
      },
    })
      .then(response => {
         // troubleshooting for jest test
        console.log('GET: ', response);
        const { numbers } = response.data;
        setFavNumbers(numbers);
      })
      .catch(response => {
        // troubleshooting for jest test
        console.log('GET error', response);
        setShowError(true);
      });
  }, []);

db返回一个包含numbers数组的对象,数组中的每一项都是一个带有id、user_id、num和reason键的对象,如下所示:

data: { numbers: [ {id: 0, user_id: 1, num: 7, reason: 'traditional lucky number'} ] }

这稍后被呈现给用户。
下面是我的Jest测试:

const mockedResponseDate = {
  numbers: [ { id: 0, user_id:1, 'number: 7, reason: 'test reason' ],
};

const mockResponse = config => {
   // later will need method to test for GET or POST
  const { method, url } = config;
  if (url === '/user/fav_numbers') {
    return {
      status: 200,
      data: mockedResponseDate,
    };
  }
};

jest.mock('packs/axios', () => jest.fn(config => mockResponse(config)));

test('Display initial numbers from db', async () => {
  render(<favNumbers userId={1}/>);

  await waitFor(() => {
    screen.debug();
  });
});

当我运行此命令时,在控制台中出现以下网络错误:

config: {
        url: '/user/fav_numbers',
        method: 'get',
        headers: { Accept: 'application/json' },
        transformRequest: [ [Function: transformRequest] ],
        transformResponse: [ [Function: transformResponse] ],
        timeout: 0,
        adapter: [Function: xhrAdapter],
        xsrfCookieName: 'XSRF-TOKEN',
        xsrfHeaderName: 'X-XSRF-TOKEN',
        maxContentLength: -1,
        maxBodyLength: -1,
        validateStatus: [Function: validateStatus],
        transitional: {
          silentJSONParsing: true,
          forcedJSONParsing: true,
          clarifyTimeoutError: false
        },
        data: undefined
      },
      request: XMLHttpRequest {},
      response: undefined,
      isAxiosError: true,
      toJSON: [Function: toJSON]
    }

我完全不知道为什么,所以任何帮助都将不胜感激。如果你还需要什么就告诉我,我想我已经把所有相关的信息都包括在内了。

dxxyhpgq

dxxyhpgq1#

从技术上讲,这不是一个修复,但它导致了代码的工作,并为我提供了预期的结果。
因此,我没有创建一个模拟响应对象,而是简单地使用了.mockReturnedValue({})函数,然后在其中传递数据、错误和加载状态。
这不完全是我想要的,因为它不太现实,但它确实意味着我的测试现在通过了,我可以工作,让这种其他方式的测试运行。

相关问题