Javascript 在Jest中模拟类模块

Javascript 在Jest中模拟类模块,javascript,unit-testing,mocking,jestjs,Javascript,Unit Testing,Mocking,Jestjs,他们在模拟http请求时遇到问题: 这是我的文件夹结构和文件: . ├── config │ ├── __mocks__ │ │ └── api.js │ └── api.js ├── handlers │ ├── __tests__ │ │ └── getUser.js │ └── getUser.js config/\uuuu mocks\uuuu/api.js config/api.js handlers/getUser.js handlers/\uuuu

他们在模拟http请求时遇到问题: 这是我的文件夹结构和文件:

.
├── config
│   ├── __mocks__
│   │   └── api.js
│   └── api.js
├── handlers
│   ├── __tests__
│   │   └── getUser.js
│   └── getUser.js
config/\uuuu mocks\uuuu/api.js

config/api.js

handlers/getUser.js

handlers/\uuuuu tests\uuuu/getUser-test.js

我基本上是想用模拟版本替换getUser上的
api
。 我与它斗争了很长一段时间,我不能让
getUser
使用mock
api
currentOutput
总是返回实际的api调用,而不是模拟响应


是否有我遗漏或做错的地方?

在调用jest.mock时必须使用相对路径:

jest.mock('../../config/api');

我使用jest.getMockFn()解决了这个问题。标准模拟在模拟对象时遇到问题

import api from '../../../src/provider/config/api';
import getUser from '../../../src/provider/handler/getUser';

import { getUserMocks } from './_handlersMocks';

api.get = jest.genMockFn();
api.get.mockImplementation(
  (url, config) =>
    new Promise((resolve, reject) => {
      resolve({ data: { items: ['getUserMocks.apiResponseMock'] } });
    }),
);
test(...)
import api from '../config/api';
import { ENDPOINT } from '../config/endpoints';
import {serverResponseExtractor, errorHandler}  from '../util';

const getUsers = params => {
  const result = api.get(ENDPOINT).then(
      serverResponseExtractor,
    ),
    errorHandler,
  );

  return result;
};

export default getUsers;
import getVods from '../getUser';

jest.mock('api');

test('getUsers> Returns valid User object', async () => {
  const currentOutput = await getUser(params);

  expect(currentOutput).toMatchSnapshot();
});
jest.mock('../../config/api');
import api from '../../../src/provider/config/api';
import getUser from '../../../src/provider/handler/getUser';

import { getUserMocks } from './_handlersMocks';

api.get = jest.genMockFn();
api.get.mockImplementation(
  (url, config) =>
    new Promise((resolve, reject) => {
      resolve({ data: { items: ['getUserMocks.apiResponseMock'] } });
    }),
);
test(...)