Jest模拟API调用返回未定义

vhmi4jdf  于 2023-01-28  发布在  Jest
关注(0)|答案(1)|浏览(182)

我正在模拟<App/>发出的一个API调用,但是该调用的jest.mock返回undefined。
这是我的应用程序:

import './App.css';
import Sidebar from './Sidebar';
import { useEffect, useState } from 'react';
import { getCount } from './api';

function App() {
  const [state, setState] = useState({
    status: 'ok',
    count: 0,
  });

  useEffect(() => {
    getCount().then((res) => setState((prevState) => ({ ...prevState, count: res })));
  }, []);

  return (
    <div className='App'>
      <Sidebar state={state} />
    </div>
  );
}

export default App;

下面是API调用(返回Promise):

export function getCount() {
  return Promise.resolve(5);
}

以下是测试API调用的测试:

import { render, screen } from '@testing-library/react';
import App from './App';

jest.mock('./api', () => ({
  getCount: jest.fn(() => Promise.resolve(5)),
}));

test('renders app', () => {
  render(<App />);
});

这是我得到下面的错误。我不知道为什么笑话模拟,这是返回一个承诺(正是应用程序期望返回)仍然是作为'未定义'回来。任何帮助是最感谢的。

zxlwwiss

zxlwwiss1#

尝试添加说明符,告诉它您正在使用ES6 import/exports模拟一个模块:

import { render, screen } from '@testing-library/react';
import App from './App';

jest.mock('./api', () => ({
  __esModule: true,
  getCount: jest.fn(() => Promise.resolve(5)),
}));

test('renders app', () => {
  render(<App />);
});

相关问题