【问题标题】:Mocking class module in JestJest 中的模拟类模块
【发布时间】:2018-01-23 19:36:54
【问题描述】:

嘿,在开玩笑地模拟 http 请求时遇到问题: 这是我的文件夹结构和文件:

.
├── config
│   ├── __mocks__
│   │   └── api.js
│   └── api.js
├── handlers
│   ├── __tests__
│   │   └── getUser.js
│   └── getUser.js

config/__mocks__/api.js

const api = {
  get: (endpoint, config) =>
    new Promise(resolve => {
      resolve({ data: { type: 'test' } });
    }),
};
export default api;

config/api.js

import axios from 'axios';
import { SERVER } from './const';

const api = axios.create({
  baseURL: SERVER.PROD,
  timeout: 10000,
  headers: {
    Accept: 'application/json',
  },
});

export default api;

handlers/getUser.js

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;

handlers/__tests__/getUser-test.js

import getVods from '../getUser';

jest.mock('api');

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

  expect(currentOutput).toMatchSnapshot();
});

我基本上是在尝试用模拟版本替换 getUser 上的api。 我为此苦苦挣扎了很长时间,我无法让getUser 改为使用模拟的apicurrentOutput 总是返回实际的 api 调用而不是模拟响应。

我有什么遗漏或做错了吗?

【问题讨论】:

    标签: javascript unit-testing mocking jestjs


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我使用 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(...)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-17
        • 2019-12-26
        • 1970-01-01
        • 1970-01-01
        • 2021-02-04
        • 2017-02-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多