Вот решение для модульного теста:
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