Javascript 在Jest中模拟类模块
他们在模拟http请求时遇到问题: 这是我的文件夹结构和文件: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
.
├── 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
使用mockapi
。
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(...)