Как проверить приведенную ниже функцию, используя шутку? - PullRequest
0 голосов
/ 14 апреля 2020

Здесь API - это URL или конечная точка queryParams - параметры запроса

export const getRequest = (API, queryParams, camelCase = true) => {
  return new Promise((resolve, reject) => {
    request
      .get(API)
      .query(queryParams)
      .then(response => {
        const formattedResponse = camelCase ? camelcaseKeys(response): response;
        resolve(formattedResponse);
      }).catch(error => {
        console.log('----- fetch unsuccessful ---- ', error);
        reject(error);
      })
  })
}

1 Ответ

0 голосов
/ 14 апреля 2020

Вот решение для модульного теста:

index.js:

import request from 'request';

export const getRequest = (API, queryParams, camelCase = true) => {
  return new Promise((resolve, reject) => {
    request
      .get(API)
      .query(queryParams)
      .then((response) => {
        resolve(response);
      })
      .catch((error) => {
        console.log('----- fetch unsuccessful ---- ', error);
        reject(error);
      });
  });
};

index.test.js:

import { getRequest } from './';
import request from 'request';

jest.mock('request', () => {
  return {
    get: jest.fn().mockReturnThis(),
    query: jest.fn(),
  };
});

describe('61203251', () => {
  afterAll(() => {
    jest.resetAllMocks();
  });
  it('should get response', async () => {
    const mResponse = { name: 'elsa' };
    request.get().query.mockResolvedValueOnce(mResponse);
    const api = 'http://localhost:3000';
    const queryParams = { id: '1' };
    const actual = await getRequest(api, queryParams);
    expect(actual).toEqual(mResponse);
    expect(request.get).toBeCalledWith(api);
    expect(request.get().query).toBeCalledWith(queryParams);
  });
  it('should handle error', async () => {
    const mError = new Error('network');
    request.get().query.mockRejectedValueOnce(mError);
    const api = 'http://localhost:3000';
    const queryParams = { id: '1' };
    await expect(getRequest(api, queryParams)).rejects.toThrow(mError);
    expect(request.get).toBeCalledWith(api);
    expect(request.get().query).toBeCalledWith(queryParams);
  });
});

Результаты модульного теста с отчетом о покрытии:

 PASS  stackoverflow/61203251/index.test.ts (8.921s)
  61203251
    ✓ should get response (5ms)
    ✓ should handle error (28ms)

  console.log stackoverflow/61203251/index.ts:513
    ----- fetch unsuccessful ----  Error: network
        at /Users/ldu020/workspace/github.com/mrdulin/react-apollo-graphql-starter-kit/stackoverflow/61203251/index.test.ts:26:20
        at step (/Users/ldu020/workspace/github.com/mrdulin/react-apollo-graphql-starter-kit/stackoverflow/61203251/index.test.ts:33:23)
        at Object.next (/Users/ldu020/workspace/github.com/mrdulin/react-apollo-graphql-starter-kit/stackoverflow/61203251/index.test.ts:14:53)
        at /Users/ldu020/workspace/github.com/mrdulin/react-apollo-graphql-starter-kit/stackoverflow/61203251/index.test.ts:8:71
        at new Promise (<anonymous>)
        at Object.<anonymous>.__awaiter (/Users/ldu020/workspace/github.com/mrdulin/react-apollo-graphql-starter-kit/stackoverflow/61203251/index.test.ts:4:12)
        at Object.<anonymous> (/Users/ldu020/workspace/github.com/mrdulin/react-apollo-graphql-starter-kit/stackoverflow/61203251/index.test.ts:25:29)
        at Object.asyncJestTest (/Users/ldu020/workspace/github.com/mrdulin/react-apollo-graphql-starter-kit/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:100:37)
        at resolve (/Users/ldu020/workspace/github.com/mrdulin/react-apollo-graphql-starter-kit/node_modules/jest-jasmine2/build/queueRunner.js:45:12)
        at new Promise (<anonymous>)
        at mapper (/Users/ldu020/workspace/github.com/mrdulin/react-apollo-graphql-starter-kit/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
        at promise.then (/Users/ldu020/workspace/github.com/mrdulin/react-apollo-graphql-starter-kit/node_modules/jest-jasmine2/build/queueRunner.js:75:41)
        at process._tickCallback (internal/process/next_tick.js:68:7)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |     100 |       50 |     100 |     100 |                   
 index.ts |     100 |       50 |     100 |     100 | 3                 
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        10.055s

исходный код: https://github.com/mrdulin/react-apollo-graphql-starter-kit/tree/master/stackoverflow/61203251

...